【问题标题】:Spring MVC web application - enabling / disabling controller from propertySpring MVC Web 应用程序 - 从属性启用/禁用控制器
【发布时间】:2013-06-09 09:58:13
【问题描述】:

我有一个在 Tomcat 中运行并使用 Spring MVC 定义控制器和映射的 Web 应用程序。我有以下课程:

@Controller("api.test")
public class TestController {

        @RequestMapping(value = "/test", method = RequestMethod.GET)   
        public @ResponseBody String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
            // body
        }
}

我想根据某处定义的属性(例如文件)使这个控制器和“.../test”路径可用。如果该属性是假的,我希望应用程序表现得好像该路径不存在,如果它是真的,则表现正常。我怎样才能做到这一点?谢谢。

【问题讨论】:

    标签: spring tomcat model-view-controller web


    【解决方案1】:

    另一种方法,可能是更简单的方法,就是在你的 RestController/Controller 中使用@ConditionalOnProperty 注解。

        @RestController("api.test")
        @ConditionalOnProperty(name = "testcontroller.enabled", havingValue = "true")
    public class TestController {
    
            @RequestMapping(value = "/test", method = RequestMethod.GET)   
            public String test(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
                // body
            }
    }
    

    这里的 yml 属性中的 testcontroller.enabled 属性说,如果未设置为 true ,则永远不会创建 TestController Bean。

    提示:我建议您使用 RestController 而不是 Controller,因为它默认添加了 @ResponseBody。您可以使用 @ConditionalOnExpression 来获得相同的解决方案,但由于 SpEL 评估而速度稍慢。

    【讨论】:

      【解决方案2】:

      如果您使用的是 Spring 3.1+,请使控制器仅在测试配置文件中可用:

      @Profile("test")
      class TestController {
          ...
      }
      

      然后通过例如启用该配置文件在 Tomcat 启动时传递以下系统属性:

      -Dspring.profiles.active=test
      

      要禁用控制器,只需省略给定的配置文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        • 2013-04-03
        • 2019-04-18
        相关资源
        最近更新 更多