ConditionalOnProperties не переключает конечную точку в классе с несколькими конечными точками Spring Boot - PullRequest
0 голосов
/ 30 августа 2018

Я пытался с аннотацией ConditionalOnProperties для конкретной конечной точки в классе, который имеет несколько конечных точек. Однако условие, кажется, не переключает его, а включается всегда. Это хорошо работает на уровне класса, но не на уровне конечной точки. Это ошибка?

@RequestMapping(path = "/test", consumes = {"application/x-www-form-urlencoded"})
@ResponseBody
@Timed()
@ConditionalOnProperty(name = "test.enabled")
public String test(@RequestParam(EXCEPTION_LOG_MESSAGE) String errorLog) {

1 Ответ

0 голосов
/ 30 августа 2018

Насколько я понимаю, аннотацию следует использовать для бобов. Либо для метода, который возвращает @Bean, либо для класса, который является @Component, @Sevice или - как в вашем случае - @Controller.

Метод, который вы аннотируете, не определяет bean-компонент, а является просто методом bean-компонента, который в любом случае определяется.

Чтобы достичь своей цели, вы можете, например,

  • помещает конкретную конечную точку в дополнительный Controller и комментирует эту
  • или используйте аннотацию @Value, чтобы получить свойство, и просто добавьте if к вам метод, который заставляет его возвращать что-то вроде 404, если свойство не установлено:

Пример последней идеи:

@Value("${test.enabled}")
private boolean testEnabled;

public ResponseEntity test() {
    if (!testEnabled) {
        return ResponseEntity.notFound().build();
    }
    // ...
}

Возможно, есть еще варианты.

...