Spring MVC Web 应用程序 - 从属性启用/禁用控制器

Posted

技术标签:

【中文标题】Spring MVC Web 应用程序 - 从属性启用/禁用控制器【英文标题】:Spring MVC web application - enabling / disabling controller from property 【发布时间】: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”路径可用。如果该属性是假的,我希望应用程序表现得好像该路径不存在,如果它是真的,则表现正常。我怎样才能做到这一点?谢谢。

【问题讨论】:

【参考方案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

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

【讨论】:

以上是关于Spring MVC Web 应用程序 - 从属性启用/禁用控制器的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC系列Spring MVC应用及ModelAndView(模型视图)

Spring Web MVC (Spring MVC) 的相关例题及解析

带有 MVC 的 Spring Boot SOAP Web 服务

Spring中Web应用程序的MVC结构?

Spring MVC

spring mvc面试题