SpringBootで発生した例外をハンドリングする方法

Spring Bootでは、@ControllerAdviceアノテーションと@ExceptionHandlerアノテーションで、グローバルな例外処理を定義できます。

最初に、グローバルな例外処理クラスを作成し、@ControllerAdviceアノテーションでこのクラスをグローバル例外処理クラスとしてマークします。次に、クラス内でメソッドを定義し、@ExceptionHandlerアノテーションでこのメソッドを例外処理メソッドとしてマークします。このメソッドの引数は、処理する例外のタイプです。

例として、例外処理をグローバルに行う、GlobalExceptionHandlerクラスを作成する。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        // 返回自定义的异常信息
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("发生异常,请稍后重试");
    }
}

上記のコードでは、handleException 関数は Exception 型の例外を処理し、例外が発生した場合、カスタム例外情報を返します。

次に、グローバル例外処理クラスをSpring Bootがスキャンできるように設定します。起動クラスに@ComponentScanアノテーションを追加してスキャンするパッケージを指定するか、起動クラスが属するパッケージまたはそのサブパッケージにグローバル例外処理クラスを配置します。

そうすることで、例外が発生したときには、全局例外処理クラスの対応するメソッドがコールされ、カスタマイズされた例外情報が返信されます。

実は、グローバル例外処理クラスは、Controller発生の例外しか処理できず、それ以外の場所で発生した例外は処理できません。それ以外の例外を処理したい場合は、対応するクラスで@ExceptionHandler注解を使用して処理します。

bannerAds