今日も備忘録です。
このドキュメントについて
下記について記載していきます。
・springの@ExceptionHandler,@ControllerAdviceを利用したExceptionのハンドリング
実行環境
・Java17
・springboot 3.0.2
実装
@RestControllerAdvice
@Slf4j
public class OriginalExceptionHandler {
@ExceptionHandler(ExampleException.class)
public ResponseEntity<Object> exampleExceptionHandler(ExampleException e) {
log.error(e.getMessage(), e);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new CommonErrorResponse(e.getMessage()));
}
説明:
-
@RestControllerAdviceを利用することで、共通のエラーハンドラを作成できる。
また、json形式のレスポンスを返却できる。
json形式ではないレスポンスを返却したい場合は@ControllerAdviceを利用する
2.@ExceptionHandlerを利用し、引数にハンドリングしたいexceptionクラスを記載することで、該当exceptionが投げられた時に動作するようになる。
,(カンマ)続きで複数のexceptionを記載することもできる。
上記実装は、ExampleExceptionがthrowされた時に、
ログレベルエラーのログを出力後、404エラーを返却する。
良きせぬエラーが発生した場合の共通化も可能
@ExceptionHandler(Exception.class)
exceptionクラスを設定しておくことで、ヌルポ等想定外のエラーが起こった場合にも共通した処理ができる。
まとめ
エラーハンドラをちゃんと実装しておくことで、想定外のエラーの場合でも共通したレスポンスを返却できたり、HTTPステータスを統一、変更したい場合にも柔軟に対応できるので、今後の実装に役立てていこうと思います。