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注解を使用して処理します。