この記事では、
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 件のコメント :
コメントを投稿