Thymeleafを使用してカスタムのSpring Bootエラーページを作成する方法

ソフトウェアはエラーを経験します。最高のアプリケーションでさえ、ある時点でエラーが発生します。したがって、すべてのアプリケーションには何らかのエラー処理メカニズムが必要です。

Spring Bootは、エラー処理の自動構成のコンポーネントとしてデフォルトのWhitelabelエラーページを提供します。それにもかかわらず、開発者はWhitelabelエラーページを置き換えるカスタムエラーページを作成することが期待されています。この記事では、Spring Bootアプリケーションのエラーページをカスタマイズする方法について説明します。

Spring BootのWhitelabelエラーページ

Spring Bootアプリケーションでエラーが発生すると、/errorURLが要求されます。この場所にビューがない場合、Whitelabelエラーページが表示されます:

Whitelabelエラーページには、エラーの日付と時刻とその対応するタイムゾーンが記載されています。さらに、エラーの種類とその関連するコードを示します。Whitelabelページは、これが404エラー(ページが見つかりません)であると述べています。これは、サンプルアプリケーションに「/products」URLのマッピングがないためです。

Whitelabelエラーページに表示される情報のほとんどは、特定のエラー属性から取得されます。Spring Bootのエラービューは、次のエラー属性にアクセスできます:

  • error: エラーの理由。
  • timestamp: エラーが発生した日付と時刻。
  • status: エラーのステータスコード。
  • exception: ルート例外のクラス名(エラーが例外の結果である場合)。
  • message: 例外メッセージ(エラーが例外の結果である場合)。
  • errors: BindingResult例外からの結果(エラーが例外の結果である場合)。
  • trace: 例外のスタックトレース(エラーが例外の結果である場合)。
  • path: エラーが発生したURLパス。

Thymeleafを使用したエラーページの作成

Spring Bootアプリケーションには、「error」テンプレート内に格納された単一のエラーページが必要です。このテンプレートの拡張子は、使用するテンプレート技術によって異なります。たとえば、Java Server Pages(JSP)テンプレートを選択した場合、ファイル名はerror.jspにする必要があります。

ただし、このサンプルのSpring Bootアプリケーションでは、Thymeleafテンプレートエンジンを使用しています。そのため、テンプレート名はerror.htmlです。エラーテンプレートは、他のすべてのテンプレートファイルと一緒にresourcesディレクトリにあるtemplateフォルダに一貫して配置する必要があります。

error.htmlファイル

 ErrorAn error has occurred...There seems to be a problem with the page you requested().Back to home

カスタマイズされたエラーページは、いくつかの重要なタスクを実行します。エラーの発生を宣言します。その後、エラーをトリガーしたHTTPリクエストを紹介します。さらに、エラーに関連するステータスコードをユーザーに提供します。しかし、ユーザーがステータスコードに慣れていない場合、ページはエラー属性を通じてコードの意味も説明します。

テキストの最後の行は、例外が発生した場合にメッセージをユーザーに提示します。次に、最後にあるリンクを使用すると、ユーザーはホームページに戻ることができます。error.htmlファイルは、CSSスタイルシートと2つの画像を使用して、次のビューを作成します:

エラーページをユーザーフレンドリーに保つ

エラーページの主な目的は、ユーザーに特定のエラーが発生したことを通知することです。ただし、このエラーページは依然としてアプリケーションの一部です。したがって、エラーページがユーザーフレンドリーであることを確認することが重要です。

これは、エラーをより複雑な方法で伝達するエラー属性を使用することを選択することを意味します。したがって、ユーザーが知る必要のない詳細が含まれており、はるかに複雑なトレース属性ではなく、パス属性を使用することを選択する可能性があります。

また、アプリケーションの内部動作に関する過剰な情報をランダムなユーザーに提供したくない場合もあります。これは、アプリケーションのセキュリティを損なう可能性があるためです。