Spring Bootでエラーページをカスタマイズする

「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という名前のビューを作成することで独自のエラーページを表示させることができる。

テンプレートエンジンとして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 &#x1f607;</p>

<p><a th:href="@{/}">Back to index</a></p>
</body>
</html>

アプリケーションを起動し、ブラウザから存在しないパス/four-zero-fourにアクセスした際のスクリーンショットを次に示す。

f:id:inaz2:20170503155203p:plain

関連リンク