「Spring Bootで簡単なWebアプリケーションを書いてみる」では、Spring Bootで簡単なWebアプリケーションを書いた。 ここでは、デフォルトのエラーページをカスタマイズしてみる。
環境
Windows 10 Pro、Java SE 8、Spring Framework 4.3.7.RELEASE(Spring Boot 1.5.2.RELEASE)
>systeminfo OS 名: Microsoft Windows 10 Pro OS バージョン: 10.0.14393 N/A ビルド 14393 OS ビルドの種類: Multiprocessor Free システムの種類: x64-based PC プロセッサ: 1 プロセッサインストール済みです。 [01]: Intel64 Family 6 Model 69 Stepping 1 GenuineIntel ~1596 Mhz >java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Custom error pageを作る
Spring Bootのデフォルトでは、コントローラで例外が発生するとHTTPの500エラーと合わせてWhitelabel Error Pageと呼ばれるページが表示される。 このページには例外の内容が表示されており、ユーザに不親切であると同時にセキュリティ上の問題を誘発するおそれがある。
Spring Bootでは、errorという名前のビューを作成することで独自のエラーページを表示させることができる。
- 27.1.9 Error Handling - Spring Boot Reference Guide
- spring-boot/error.html at v1.5.2.RELEASE · spring-projects/spring-boot
テンプレートエンジンとしてThemeleafを使用している場合は、次のパスにファイルを作成すればよい。
- src/main/resources/templates/error.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>Error</title> </head> <body> <h1 th:text="${status} + ' ' + ${error}">500 Internal Server Error</h1> <p><a th:href="@{/}">Back to index</a></p> </body> </html>
特定のHTTPステータスに対応するerror pageを作る
/error.htmlは任意のステータスについてのエラーページとなるが、404など特定のステータスに応じたエラーページを作成したい場合もある。
そのような場合は、/error/XXX.html
を作成すればよい。
- src/main/resources/templates/error/404.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>Error</title> </head> <body> <h1 th:text="${status} + ' ' + ${error}">404 Not Found</h1> <p>The requested URL was not found on this server 😇</p> <p><a th:href="@{/}">Back to index</a></p> </body> </html>
アプリケーションを起動し、ブラウザから存在しないパス/four-zero-four
にアクセスした際のスクリーンショットを次に示す。