今回は、Spring5で追加されたエラーハンドリングについて調べてみようと思います。
「Resolver」「ControllerAdvice」アノテーションを使ったエラーハンドリングがありますが今回は、「ResponseStatusException」について調べてみます。
ResponseStatusException
- Spring5に追加されたExceptionクラスです。
- 独自にExecptionクラスを作成せずにエラー処理を行うことができます。
- Exception作成時にHttpStatusを指定することで、どのHttpステータスを送信するかを決定します。
@GetMapping(value = "/{id}")
public Foo findById(@PathVariable("id") Long id, HttpServletResponse response) {
try {
Foo resourceById = RestPreconditions.checkFound(service.findOne(id));
eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
return resourceById;
}
catch (MyResourceNotFoundException exc) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Foo Not Found", exc);
}
}
メリット
- プロトタイピングに最適:基本的なソリューションを非常に迅速に実装できます。
- 1つのタイプ、複数のステータスコード:1つの例外タイプは、複数の異なる応答につながる可能性があります。これにより、@ ExceptionHandlerと比較して密結合が減少します。
- 多くのカスタム例外クラスを作成する必要はありません。 例外はプログラムで作成できるため、例外処理をより細かく制御できます。
