SpringBoot:ホワイトラベルエラーページのカスタマイズ
1. 概要
この記事では、を無効にしてSpring Bootアプリケーションのデフォルトのエラーページをカスタマイズする方法を見ていきます。適切なエラー処理はプロ意識と質の高い作業を表しています。
2. ホワイトラベルエラーページの無効化
まず、 server.error.whitelabel.enabledプロパティをfalse:に設定して、ホワイトラベルエラーページを完全に無効にする方法を見てみましょう。
server.error.whitelabel.enabled=false
このエントリをapplication.propertiesファイルに追加すると、エラーページが無効になり、Tomcatなどの基盤となるアプリケーションコンテナに由来する簡潔なページが表示されます。
ErrorMvcAutoConfiguration Beanを除外しても同じ結果を得ることができます。これを行うには、次のエントリをプロパティファイルに追加します。
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration
#for Spring Boot 2.0
#spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
または、このアノテーションをメインクラスに追加します。
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
上記のすべての方法で、ホワイトラベルエラーページが無効になります。 それでは、誰が実際にエラーを処理するのかという疑問が残ります。
さて、上記のように、それは通常、基盤となるアプリケーションコンテナです。 良い点は、すべてのデフォルトの代わりにカスタムエラーページを表示することで、さらにカスタマイズできることです。これが次のセクションの焦点です。
3. カスタムエラーページの表示
まず、カスタムHTMLエラーページを作成する必要があります。
Thymeleaf テンプレートエンジンを使用しているため、ファイルをerror.htmlとして保存します。
<!DOCTYPE html>
<html>
<body>
<h1>Something went wrong! </h1>
<h2>Our Engineers are on it</h2>
<a href="/">Go Home</a>
</body>
</html>
このファイルをresources/templatesディレクトリに保存すると、デフォルトのSpring BootのBasicErrorControllerによって自動的にが取得されます。
カスタムエラーページを表示するために必要なのはこれだけです。 いくつかのスタイリングにより、ユーザーにとってより見栄えの良いエラーページが表示されます。
使用したいHTTPステータスコードでファイルに名前を付けることで、より具体的にすることができます。 ファイルをresources/ templates / errorに404.html として保存すると、404エラーに対して明示的に使用されます。
3.1. カスタムErrorController
これまでの制限は、エラーが発生したときにカスタムロジックを実行できないことです。 これを実現するには、デフォルトのエラーコントローラーbeanを作成する必要があります。
このために、 ErrorControllerインターフェイスを実装するクラスを作成する必要があります。さらに、 server.error.path プロパティを設定して、エラー時に呼び出すカスタムパスを返す必要があります。発生した
@Controller
public class MyErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError() {
//do something like logging
return "error";
}
}
上記のスニペットでは、クラスに @Controller のアノテーションを付け、プロパティ server.error.path:として指定されたパスのマッピングを作成します。
server.error.path=/error
このようにして、コントローラーは /errorパスへの呼び出しを処理できます。
handleError()で、前に作成したカスタムエラーページを返します。 ここで404エラーをトリガーすると、表示されるのはカスタムページです。
handleError()をさらに拡張して、さまざまなエラータイプの特定のエラーページを表示してみましょう。
たとえば、404および500エラータイプ専用に適切に設計されたページを作成できます。 次に、エラーのHTTPステータスコードを使用して、表示する適切なエラーページを決定できます。
@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
Integer statusCode = Integer.valueOf(status.toString());
if(statusCode == HttpStatus.NOT_FOUND.value()) {
return "error-404";
}
else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
return "error-500";
}
}
return "error";
}
次に、たとえば404エラーの場合、error-404.htmlページが表示されます。
4. 結論
この情報を使用して、エラーをよりエレガントに処理し、ユーザーに美的なページを表示できるようになりました。
いつものように、完全なソースコードはGithubで利用できます。