Spring Boot 基本

Spring Boot上でControllerAdviceアノテーションを利用したエラー処理を実装してみた

発生したエラー種類に応じたエラー処理を実装するには、ControllerAdviceアノテーションを適用したクラス内で、引数に例外クラスを指定したExceptionHandlerアノテーションを付与したメソッドを利用することで簡単に行える。

今回は、Spring Boot上でControllerAdviceアノテーションを利用したエラー処理を実装してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の実装が完了していること

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。

ControllerAdviceアノテーションを適用したクラスの実装内容は以下の通りで、NullPointerExceptionが発生した場合、FileNotFoundExceptionが発生した場合、それ以外の例外が発生した場合それぞれで異なる例外処理を実施している。



また、コントローラクラスの内容は以下の通り。

さらに、各HTMLファイルの内容は以下の通り。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-controller-advice-error/demo

サンプルプログラムの実行結果

DemoControllerAdviceクラスを利用していない場合の実行結果は、以下の通りで、全てデフォルトのエラー画面が表示される。

1) Spring Bootアプリケーションを起動し、「http://(サーバー名):(ポート番号)/」とアクセスすると、以下の画面が表示されるので、「NullPointerExceptionを発生させます」ボタンを押下
サンプルプログラムの実行結果_1_1

2) 以下のように、デフォルトのエラー画面(error.html)が表示されることが確認できる
サンプルプログラムの実行結果_1_2

3) 以下の画面で「FileNotFoundExceptionを発生させます」ボタンを押下
サンプルプログラムの実行結果_1_3

4) 以下のように、デフォルトのエラー画面(error.html)が表示されることが確認できる
サンプルプログラムの実行結果_1_4

5) 以下の画面で「上記以外の例外を発生させます」ボタンを押下
サンプルプログラムの実行結果_1_5

6) 以下のように、デフォルトのエラー画面(error.html)が表示されることが確認できる
サンプルプログラムの実行結果_1_6

また、DemoControllerAdviceクラスを利用した場合の実行結果は、以下の通りで、発生したエラー種類に応じたエラー画面が表示される。

1) Spring Bootアプリケーションを起動し、「http://(サーバー名):(ポート番号)/」とアクセスすると、以下の画面が表示されるので、「NullPointerExceptionを発生させます」ボタンを押下
サンプルプログラムの実行結果_2_1

2) 以下のように、NullPointerExceptionが発生した場合のエラー画面(error_null.html)が表示されることが確認できる
サンプルプログラムの実行結果_2_2

3) 以下の画面で「FileNotFoundExceptionを発生させます」ボタンを押下
サンプルプログラムの実行結果_2_3

4) 以下のように、ファイルが見つからなかった場合のエラー画面(error_no_file.html)が表示されることが確認できる
サンプルプログラムの実行結果_2_4

5) 以下の画面で「上記以外の例外を発生させます」ボタンを押下
サンプルプログラムの実行結果_2_5

6) 以下のように、デフォルトのエラー画面(error.html)が表示されることが確認できる
サンプルプログラムの実行結果_2_6

要点まとめ

  • ControllerAdviceアノテーションを適用したクラス内で、引数に例外クラスを指定したExceptionHandlerアノテーションを付与したメソッドを利用すると、発生したエラー種類に応じたエラー処理を実装することができる。