【问题标题】:How to set a context root for all @RestController in Spring Web MVC?如何在 Spring Web MVC 中为所有 @RestController 设置上下文根?
【发布时间】:2017-11-13 13:13:27
【问题描述】:

我希望将/api 定义为我所有@RestControllers 的根上下文,并且不想为每个人指定它。

例如,我想写@RestController("/clients") 而不是@RestController("/api/clients") 并在/api/clients 上提供我的请求映射,但我的静态资源(在/main/resources/static 中)仍然在/** 上提供服务。

因此,在application.properties 中设置server.servlet.contextPath=/api 不是我用例的解决方案,因为静态资源将在/api 提供,这是我不想要的。

简而言之,我想在 Spring Web MVC 中拥有与 JAX-RS @ApplicationPath("/api") 相同的功能,这可能吗?

【问题讨论】:

    标签: spring spring-mvc spring-boot spring-web


    【解决方案1】:

    一种可能的解决方案(变通方法)是使用带映射的父类

    @RequestMapping(path="/api")
    abstract class BaseController{
        ....
    }
    

    其他控制器可以扩展它

    class OtherController extends BaseController {
      @RequestMapping(path="/clients")
      public ....clients(....){
       .....
      }
    }
    

    请注意,如果您将 @RequestMapping 放在任何子类的顶部,它将被覆盖。就像解释herehere

    【讨论】:

      【解决方案2】:

      通过在 application.properties 中使用 spring.mvc.servlet.path 配置来设置所需的上下文根。

      例如:

      spring.mvc.servlet.path=/api/v1
      

      【讨论】:

        猜你喜欢
        • 2017-04-01
        • 1970-01-01
        • 2016-04-24
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        • 2015-09-19
        • 2013-07-21
        相关资源
        最近更新 更多