この記事では、
Spring Boot アプリケーションで、HTTP エラーが発生した場合に、ブラウザにWhite Label Pageではなく、エラーページを表示します。
Spring Boot アプリケーションで、HTTP エラーが発生した場合に、ブラウザにWhite Label Pageではなく、エラーページを表示します。
関連情報(静的なエラーページ)
HTTP エラー発生時に静的なエラーページを表示する場合は、プログラムや設定ファイルをさわることなく、HTMLファイルを配置するのみで、カスタマイズすることができます。
開発環境
・Windows 10 64bit
・Eclipse 2018-12(Eclipse 4.10)
・Java 8
・Spring Boot 2.1.3(Spring Tool Suite 4)
・Thymeleaf 3.0.11
デフォルトのエラーページ(White Label Page)
Spring Boot アプリケーションは、HTTP エラーが発生した場合、デフォルトで、ブラウザにWhitelabel Error Pageを表示します。
例えば、
HTTP 404 エラーが発生すると、ブラウザでは、以下のような画面を表示します。
カスタムエラーページ(HTML)
ここでは、
HTTP エラーが発生した場合、ブラウザにWhite Label Pageを表示しないようにします。
HTTP エラーが発生した場合、
ステータスコードごとに、それぞれのエラーページを表示したり、エラーページにパラメータをわたして表示することができます。
HTTP エラー(動的)
任意のディレクトリにエラーページを配置して、ErrorViewResolverインターフェースを実装したクラスを作成します。
例えば、
以下のディレクトリ直下にエラーページ「404.html」、「4xx.html」、「5xx.html」を配置して、GlobalErrorViewResolverクラス(以下のソースコード)を作成すると、
HTTP 404のエラーが発生した場合は、「404.html」
HTTP 403のエラーが発生した場合は、「4xx.html」
HTTP 500のエラーが発生した場合は、「5xx.html」
のように表示することができます。
・ディレクトリ
src/main/resources/templates/error
・エラーページ
xxx.html
* xxxは、404などのステータスコードを指定します。4xx、5xxのように指定することもできます。
・ソースコード(サンプル)
package com.xxx.xxx.xxx; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import org.springframework.web.servlet.ModelAndView; @Component public class GlobalErrorViewResolver implements ErrorViewResolver { @Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { ModelAndView mav = new ModelAndView(); // HTTP 404 error if (status == HttpStatus.NOT_FOUND) { mav.addObject("message", "HTTP 404 エラー メッセージ"); mav.setViewName("error/404"); // HTTP 4xx error } else if (status.is4xxClientError()) { mav.setViewName("error/4xx"); // HTTP 5xx error } else if (status.is5xxServerError()) { mav.setViewName("error/5xx"); } else { mav = null; } return mav; } }
メモ
DefaultErrorViewResolverクラスの以下のメソッドの処理内容を参考にしました。
・ソースコード(メソッド)
@Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { ModelAndView modelAndView = resolve(String.valueOf(status.value()), model); if (modelAndView == null && SERIES_VIEWS.containsKey(status.series())) { modelAndView = resolve(SERIES_VIEWS.get(status.series()), model); } return modelAndView; }
スポンサーリンク
0 件のコメント :
コメントを投稿