例外
@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
メソッドと同じ戻り値をサポートします。