LoginSignup
1
2

springで共通のエラーハンドラを実装する【Exception Handler】

Last updated at Posted at 2023-06-21

今日も備忘録です。

このドキュメントについて

下記について記載していきます。
・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()));
    }

説明:

  1. @RestControllerAdviceを利用することで、共通のエラーハンドラを作成できる。
    また、json形式のレスポンスを返却できる。
    json形式ではないレスポンスを返却したい場合は@ControllerAdviceを利用する

2.@ExceptionHandlerを利用し、引数にハンドリングしたいexceptionクラスを記載することで、該当exceptionが投げられた時に動作するようになる。
,(カンマ)続きで複数のexceptionを記載することもできる。

上記実装は、ExampleExceptionがthrowされた時に、
ログレベルエラーのログを出力後、404エラーを返却する。

良きせぬエラーが発生した場合の共通化も可能

@ExceptionHandler(Exception.class)

exceptionクラスを設定しておくことで、ヌルポ等想定外のエラーが起こった場合にも共通した処理ができる。

まとめ

エラーハンドラをちゃんと実装しておくことで、想定外のエラーの場合でも共通したレスポンスを返却できたり、HTTPステータスを統一、変更したい場合にも柔軟に対応できるので、今後の実装に役立てていこうと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2