Spring Bootを使ってWebアプリケーションを開発していると、「存在しないURLをブラウザから指定された場合、どうなるの?」という場面に直面します。たとえば、実際には /login というURLしかないのに、ユーザーが /loginn と打ち間違えた場合などですね。

このようなときにSpring Bootがどのような動きをするのか、詳しく見ていきましょう。


存在しないURLをリクエストするとどうなる?

Spring Bootでは、存在しないURLをリクエストされると、「HTTP 404 Not Found」 というエラーになります。これはWebの世界で「お探しのページは見つかりませんでした」という意味を持つ標準的なエラーです。

デフォルトではどう表示される?

Spring Bootでは、デフォルトで以下のようなシンプルなエラーページが表示されます。

Whitelabel Error Page

This application has no explicit mapping for /notfound, so you are seeing this as a fallback.

There was an unexpected error (type=Not Found, status=404).


「Whitelabel Error Page」とは?

これはSpring Bootが用意している簡易的なエラーページのことです。

例えるなら、建物の工事現場に置いてある「仮設トイレ」のようなもので、開発初期にはとりあえず使えるけれど、本番環境でそのまま使うには少し味気ない、という感じです。


オリジナルの404ページを作るには?

方法1:error/404.html を置く

Spring Bootでは、src/main/resources/templates/error/404.html にファイルを置くと、自動的にそのHTMLが表示されるようになります。

仕組み:

Spring Bootは、HTTPステータスコードに対応するHTMLファイルを探して表示してくれます。たとえば:

  • 404.html → 404エラー(Not Found)
  • 500.html → 500エラー(Internal Server Error)

このように、フォルダ名とファイル名の組み合わせで、自分の好きなデザインのエラーページを出せるようになります。

方法2:@ControllerAdvice を使って制御する

もっと柔軟にしたいときは、例外ハンドリングの機能を使うのもアリです。

@ControllerAdvice
public class CustomErrorController {

    @ExceptionHandler(NoHandlerFoundException.class)
    public String handle404() {
        return "error/custom-404";
    }
}

※この場合は、application.properties に以下の設定も必要です:

spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false


エラーページをカスタマイズするメリット・デメリット

項目メリットデメリット
デフォルト(Whitelabel)設定不要ですぐ使える見た目が素っ気ない
HTMLでカスタマイズ好きなデザインにできるHTMLテンプレートが必要
@ControllerAdvice動的な対応が可能コード量が増える

まとめ

存在しないURLにアクセスされたとき、Spring Bootは自動的に404エラーを返します。そして、何も設定していないと「Whitelabel Error Page」が表示されます。

でも、それでは味気ないので、本番環境ではぜひカスタム404ページを作成しましょう!


次に学ぶべきこと

次は以下のトピックがおすすめです!

  • @ExceptionHandler を使った例外処理の共通化
  • REST APIでのエラー応答フォーマットの統一(JSONで返すなど)
  • Spring BootのErrorControllerインターフェースのカスタマイズ

最後までお読みいただきありがとうございます。