以前、HTTPステータスが404エラーの場合に、404.htmlに遷移するようなプログラムを作成したことがあったが、今回は、HTTPステータスが404エラーの場合に、404.html以外の画面に遷移するよう修正してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
Spring Bootで特定のHTTPステータスコードが返却された場合に独自エラー画面を表示してみたSpringフレームワークでは、特定のHTTPステータスコード(例:404(Not Found))が返却された場合に独自のエラー画面に遷...
サンプルプログラムの作成
作成したサンプルプログラムの構成は以下の通り。

なお、上記の赤枠は、前提条件のプログラムから追加/変更したプログラムである。
404エラーが発生した場合に、パス「/notFoundNew」に遷移するよう設定するよう、以下のクラスを追加している。
package com.example.demo;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
@Component
public class DemoCustomConfigration
implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
// HTTP 404(NOT FOUND)エラーが発生した場合に、パス「/notFoundNew」に遷移するよう設定
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notFoundNew"));
}
}また、パス「/notFoundNew」の指定を、以下のコントローラクラスに追加している。
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DemoController {
/**
* 初期表示画面を表示する
* @return 初期表示画面
*/
@GetMapping("/")
public String index(){
return "index";
}
/**
* HTTP 500エラー(404以外)を発生させる
* @return 存在しない画面
*/
@PostMapping("/submit_error_other")
public String submitErrorOther(){
// 存在しない画面に遷移しようとするため、
// HTTP 500エラーが発生する
return "no_page";
}
/**
* HTTP 404エラー発生後のエラー画面に遷移させる
* @return HTTP 404エラー発生後のエラー画面
*/
@RequestMapping("/notFoundNew")
public String notFoundNew(){
return "404new";
}
}さらに、パス「/notFoundNew」の画面遷移先となるHTMLの内容は、以下の通り。
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>404エラー画面(新規)</title>
</head>
<body>
<h1>404エラー画面(新規)</h1>
<p>
指定されたURLが見つかりませんでした。<br/>
指定されたURLのパスがコントローラクラスに存在するかどうか確認してください。
</p>
<br/><br/>
<form method="get" th:action="@{/}">
<input type="submit" value="戻る" />
</form>
</body>
</html>その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-http-error-original/demo
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスすると、以下のように、初期表示画面が表示されることが確認できるので、「このボタンを押すと404エラーが発生します」ボタンを押下する。

2) 以下のように、画面「404new.html」に遷移することが確認できる。

なお、変更前の遷移先画面(404.html)の表示内容は、以下の通り。

要点まとめ
- HTTPステータスが404エラーの場合に、404.html以外の画面に遷移するようにするには、ConfigurableServletWebServerFactoryインタフェースを型定義にもつ、WebServerFactoryCustomizerインタフェースを実装したクラスの、customizeメソッド内で、エラーページ設定を行えばよい。





