Spring boot:如何为多个RestControllers设置公共路径

时间:2015-11-14 18:44:57

标签: spring rest spring-boot

我正在使用spring boot来编写api,我想将所有资源映射到公共基本路径(在这种情况下为/ api)。但是,我不想注释每个RestController类来执行此操作(例如,通过使用@RequestMapping进行注释)。 我已经考虑过以下解决方案,但它们都有一个我不想要的缺点:

  • 创建一个基类(例如ApiRestController)并让所有其他的RestController继承这个。这样做的缺点是,在类级别上的@Requestmapping不会在基类和实现类之间合并。
  • 注释所有RestController,但这会导致代码重复
  • 更改server.context-path属性。这样做的缺点是所有端点都将使用此基本路径。甚至是执行器项目暴露的终点。
  • 使用自定义DispatcherServlet和ServletRegistrationBean。但这似乎与更改server.context-path。
  • 具有相同的效果

所以有人知道如何做到这一点,没有我总结的解决方案的缺点。该项目将仅暴露基于REST的后端,不会为任何静态内容提供服务(不知道这是否会影响可能的解决方案)。 Restcontrollers也分为多个包。

感谢。

4 个答案:

答案 0 :(得分:4)

为什么不在所有RestControllers上放置@RequestMapping(" / api")?

@RestController
@RequestMapping("/api")
public class UserApi {
    @RequestMapping("/user")
    public String user() {
        ...
    }
}

答案 1 :(得分:2)

您可以尝试创建包含@RestController@RequestMapping的自定义注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@RestConntroller
@RequestMapping(value = "/api" )
@interface MyController {

}

答案 2 :(得分:0)

请参阅我对类似问题的回答。 How to configure a default @RestController URI prefix for all controllers? 您可以创建自定义注释,并仅基于它执行映射。

答案 3 :(得分:0)

您可以尝试使用@path注释将多个URI视为单个URI。

@Path("sampleresource/{Filepath:.*}")
public interface SampleResource {
    @GET
    @Produces({ MediaType.TEXT_PLAIN })
    @Path("/hello")
    public Response sayHello();
}