Spring Boot @RestController使用属性启用/禁用方法

问题描述 投票:4回答:1

例如,我可以使用@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方法?

java spring spring-boot application-settings
1个回答
0
投票
[遗憾的是,@ ConditionalOnProperty批注不能用于单个@RequestMapping方法。解决方法是,可以将所需的映射移动到单独的控制器Bean。

http://dolszewski.com/spring/feature-toggle-spring-boot/

我希望这个人可以通过相同的问题对访问此页面的人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.