私は今後のすべてのプロジェクトで再利用したいフレームワークを作成しています。サブプロジェクトで@ControllerAdvice
が定義されていない場合は、フレームワークが自動的に例外処理のためのデフォルトのアドバイスを初期化するようにします。@ControllerAdvice条件をbeanに与える方法は?
public class ExHandler implements IAdvice {
ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorDTO default(xception e) {
return new ErrorDTO();
}
}
私は次のように試みたが、動作しません:サブプロジェクトで
@Configuration
static class MyConfig {
@ControllerAdvice
@ConditionalOnMissingBean(IAdvice.class)
static class AdviceExHandler extends ExHandler {
}
}
:
@ControllerAdvice
public class SubHandler extends ExHandler {
}
結果:それは動作しますが。しかし、サブプロジェクトでExHandler
が定義されていない場合、Beanはまったく初期化されません。しかし、なぜ?
Sidenote:エラーハンドリングが例外ハンドラ内のメソッドの順序によって異なるため、複数のControllerAdvice
を防止しようとしています。したがって、私は複数のクラスを導入して注文を混乱させたくありません。
うわー、素晴らしい。注釈に基づいて条件を定義する機能については知らなかった。それは完全に合っている。 – membersound