1. ホーム
  2. java

[解決済み] Spring Bootの@RestControllerはプロパティで有効/無効を切り替えられるか?

2023-05-30 03:17:23

質問

標準的なSpring Bootアプリケーションに @RestController がある場合、例えば

@RestController
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
    @RequestMapping(value = "bar")
    public ResponseEntity<String> bar(
        return new ResponseEntity<>("Hello world", HttpStatus.OK);
    }
}

エンドポイントが起動しないようにするアノテーションやテクニックはありますか? を防ぐアノテーションやテクニックはありますか? を防ぐアノテーションやテクニックはありますか?

注意: メソッド内部でプロパティをテストして爆発させることは、エンドポイントが存在するため、解決策にはなりません。

私は粒度を気にしません: すなわち、メソッドまたはクラス全体を有効化/無効化することは、両方とも問題ありません。


プロファイルはプロパティではないので、プロファイルを介した制御は私の問題を解決しません。

どのように解決するのですか?

簡単な解決策を見つけました。 @ConditionalOnExpression :

@RestController
@ConditionalOnExpression("${my.controller.enabled:false}")
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
    @RequestMapping(value = "bar")
    public ResponseEntity<String> bar(
        return new ResponseEntity<>("Hello world", HttpStatus.OK);
    }
}

このアノテーションを追加すると

my.controller.enabled=true

で、私の application.properties ファイルでは、コントローラは全く起動しません。

また、より便利な

@ConditionalOnProperty("my.property")

これは上記と全く同じ動作で、もしプロパティが存在して "true" であれば、コンポーネントは開始され、そうでなければ開始されません。