例如,我可以使用@RestController
启用/禁用整个@ConditionalOnProperty
:
@RestController
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.enabled", havingValue = "true")
@RequestMapping("/v1.0/decisions")
public class DecisionController {
}
以下配置可以正常工作。但是我需要对此控制器进行更细粒度的控制,并启用/禁用对其中某些方法的访问,例如:
@RestController
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.enabled", havingValue = "true")
@RequestMapping("/v1.0/decisions")
public class DecisionController {
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.create.enabled", havingValue = "true")
@PreAuthorize("isAuthenticated()")
@RequestMapping(method = RequestMethod.POST)
public DecisionResponse create(@Valid @RequestBody CreateDecisionRequest request, Authentication authentication) {
...
}
}
您可能会看到,我已经向@ConditionalOnProperty
方法中添加了create
,但是这种方法不起作用,即使启用了DecisionController
,即使create
属性中不存在,也会启用com.example.api.controller.decision.DecisionController.create.enabled
方法我的application.properties
。
在这种情况下如何正确启用/禁用create
方法?
[遗憾的是,@ ConditionalOnProperty批注不能用于单个@RequestMapping方法。解决方法是,可以将所需的映射移动到单独的控制器Bean。
http://dolszewski.com/spring/feature-toggle-spring-boot/
我希望这个人可以通过相同的问题对访问此页面的人有所帮助。