例外

@Controller および @ControllerAdvice クラスには、コントローラーメソッドからの例外を処理する @ExceptionHandler メソッドを含めることができます。次の例には、このようなハンドラーメソッドが含まれています。

  • Java

  • Kotlin

@Controller
public class SimpleController {

	// ...

	@ExceptionHandler (1)
	public ResponseEntity<String> handle(IOException ex) {
		// ...
	}
}
1@ExceptionHandler の宣言。
@Controller
class SimpleController {

	// ...

	@ExceptionHandler (1)
	fun handle(ex: IOException): ResponseEntity<String> {
		// ...
	}
}
1@ExceptionHandler の宣言。

例外は、伝播されるトップレベルの例外(つまり、直接 IOException がスローされる)、トップレベルのラッパー例外内の直接の原因(たとえば、IllegalStateException 内にラップされた IOException)に一致します。

例外型を一致させるには、前の例に示すように、ターゲット例外をメソッド引数として宣言することが望ましいです。あるいは、アノテーション宣言により、一致する例外型を絞り込むこともできます。一般に、引数のシグネチャーをできるだけ具体的にし、対応する順序で優先順位を付けた @ControllerAdvice 上でプライマリルート例外マッピングを宣言することをお勧めします。詳細については、"MVC" セクションを参照してください。

WebFlux の @ExceptionHandler メソッドは、@RequestMapping メソッドと同じメソッド引数と戻り値をサポートしていますが、リクエスト本体および @ModelAttribute 関連のメソッド引数は例外です。

Spring での @ExceptionHandler メソッドのサポート WebFlux は、@RequestMapping メソッドの HandlerAdapter によって提供されます。詳細については、DispatcherHandler を参照してください。

メソッド引数

@ExceptionHandler メソッドは、@RequestMapping メソッドと同じメソッド引数をサポートしますが、リクエスト本文がすでに使用されている可能性があります。

戻り値

@ExceptionHandler メソッドは、@RequestMapping メソッドと同じ戻り値をサポートします。