子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【Java】【Spring】Springで例外処理の方法まとめ

Springで例外処理の方法について勉強したのでメモ。

Springで例外処理する方法は大きく5つあるらしい。
(現実的なのは3〜5の3つ。)

Springでの例外処理の方法5つ
1.他の言語同様メソッド1つ1つ必要な箇所にtry〜catchを描く方法
2.そもそも例外処理を書かず、エラーページだけを用意しておく方法
3.@AfterThrowingを使う方法
4.コントローラクラス毎に共通の実装する方法
5.Webアプリ全体で共通の実装をする方法

1.他の言語同様メソッド1つ1つ必要な箇所にtry〜catchを描く方法

1つ1つに対して、例外処理を書くというのが1つめ。
はっきり言ってオススメできない。
Springフレームワークを採用していてこの方法をとることはまずないと思われる。
漏れも心配だし、同じような処理をいろいろなところに書くと修正も大変。
あと、コードの可読性も落ちる。

2.そもそも例外処理を書かず、エラーページだけを用意しておく方法

Springでは、ロジックを書かなくても、エラーが起きた時に自動でエラーページに飛ばしてくれる機能がある。
そのため、src/main/resources/templates/error.htmlファイルを用意しておくことで、エラーが起こった時に自動で、
error.htmlに飛ばしてくれる。
また、HTTPエラー毎に表示内容を変えることもできる。
その場合は、src/main/resources/templates/errorというようにerrorフォルダを作成しておき、
404エラーなら404.html。500エラーなら500.htmlなどエラー毎のページを用意しておく。
ユーザー的にはこれだけでいいが、システム運用的にはエラーログなどの出力がこれだけだとできないのでつらい。

3.@AfterThrowingを使う方法

aspectフォルダ内に、アスペクト用のクラスを作成する。
そして、メソッドに@AfterThrowingアノテーションをつける。
こうすることにより、例外が起こった後に、このメソッドが呼び出されるため、メソッド内でエラーログの出力などができる。
対象となるクラスは@AfterThrowingアノテーションで設定できる。

4.コントローラクラス毎に共通の実装する方法

コントローラクラス毎に、@ExceptionHandlerアノテーションをつけたメソッドを用意することで
コントローラ毎に違った例外処理を実装できる。
Exceptionのクラスを指定することで、Exception毎に違った処理が書ける。

5.Webアプリ全体で共通の実装をする方法

@ControllerAdviceアノテーションつけたクラスを用意し、@ExceptionHandlerアノテーションをつけたメソッドを用意する。
こうすることにより、Webアプリケーション全体で発生した例外をこのクラスで共通かでき、Exception毎に違った処理が書ける。

Springで例外処理の方法についてまとめてみました。
いろいろやり方はあるみたいなので、プロジェクトの規模などを考えて選定したいですね。