springの3種類の例外ハンドリング方法を紹介します

spring

springMVCもSAStrutsのように、例外ハンドラクラスが用意されています。例外をその都度キャッチしてエラー処理するよりは、例外ハンドラクラスでまとめてエラー処理する方が一般的です。
何より共通の方が楽です。

springMVCには、例外ハンドリングの方法がいくつか用意されています。今回は、3種類の例外ハンドリングの方法と使いどころを解説します。仕様の詳細は別ページで行います。

[スポンサーリンク]

この章でやること

例外ハンドラの利用方法を解説します。

例外ハンドラが動くポイント

絵が下手ですみません。。(笑)
こちらのイメージは、例外発生時、例外ハンドラがどの部分で例外をキャッチするかを現しています。

spring-exception

① @AfterThrowingの概要

こちらは、各メソッド単位で例外をキャッチします。
daoクラス内のメソッドで例外が発生したら、daoクラス内のメソッド終了後に@AfterThrowingが例外処理を行います。
@AfterThrowingの注意点としては、例外処理後も例外をthrowします。キャッチして例外を握り潰すことはありません。

詳細説明

@AfterThrowingの詳細な使い方はこちらを参照して下さい。

② @ExceptionHandlerの概要

こちらは、コントローラクラス内で例外をキャッチします。
daoクラス、serviceクラス内で発生した例外をthrowして、最終的にコントローラクラスで例外をキャッチします。
@ExceptionHandlerの注意点としては、1つのコントローラ内のみで有効です。
例えば、コントローラA、コントローラB、とあった場合、コントローラAのみ@ExceptionHandlerを設定しても、コントローラBでは例外をキャッチ出来ません。

詳細説明

@ExceptionHandlerの詳細な使い方はこちらを参照して下さい。

③ HandlerExceptionResolverの概要

こちらは、システム全体で例外をキャッチします。
daoクラス、serviceクラス、コントローラクラス内で発生した例外をthrowして、最終的にHandlerExceptionResolverで例外をキャッチします。
私は、HandlerExceptionResolverを使って例外をハンドリングする方法が一番好みです。
こちらはアノテーションではなく、例外ハンドラクラスを実装する必要があります。

詳細説明

HandlerExceptionResolverの詳細な使い方はこちらを参照して下さい。

最後に

springMVCで例外をハンドリングする方法は他にもあります。
今回は代表的な例外ハンドリング方法をとりあげてみました。
個人的には、HandlerExceptionResolverが使いやすく、一番好きです。
逆に@ExceptionHandlerは、いまいちですね。やはりコントローラクラス内という「しばり」があるので多少使いにくいように感じます。(イレギュラー的な例外処理なら一番使いやすそうですが)

例外ハンドラを掘り下げてみるのも面白いかもしれませんね!
それでは!