Contents
SpringBoot初期状態の例外処理
SpringBootでは、初期状態では例外を投げるとどうなるか検証します。
下記サンプルコードをデプロイし、画面からアクセスします。
@GetMapping("/children/register")
public String register(Model model) {
throw new IllegalArgumentException();
}
Whitelabel Error Pageを表示します。
ページ下部にエラーコードが表示されます。(上画像は500エラー)
任意のエラーページを表示する
エラーコードに応じて、任意のエラーペーを表示するには、
resrouces/templates/error 配下にエラーコードごとの.htmlを作成します。
$ tree
.
├── build.gradle
└── src
├── main
│ ├── java ...
│ └── resources
│ ├── application.yml
│ └── templates
│ ├── error
│ │ ├── 400.html
│ │ ├── 404.html
│ │ └── 500.html
任意のエラーページを作成します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>子どものお小遣い帳アプリ</title>
</head>
<body>
<main>
<h1>500 エラー</h1>
<div>予期せぬエラーが発生しました。</div>
</main>
<footer>
<div>
<a href="/">トップページ</a>
</div>
</footer>
</body>
</html>
IllegalArgumentExceptionを投げて500エラーを発生させて、動作確認をします。
Whitelabel Error Pageに変わって、500エラーのページが表示されました。
存在しないURLにアクセスすると、404エラーを確認できます。
尚、エラーページのHTMLもThymeleafテンプレートが適用できます。
任意のExceptionを発生させる
Exceptionを体系づける
IlleagalArgmentExceptionなどをそのまま使っている開発チームは見たことがありません。
プロジェクト名+Exceptionをつけた独自の例外クラスを作成しています。
そこで2パターンに分かれます。
方針1.例外ごとにクラスを細かく分ける
方針2.システム例外と業務例外の2つだけ作る
これらは結局、どの粒度でクラスを分けるかというだけの話ですので、どちらでも良いです。
エラーログをパッと見たときに、
・なぜ why
・どこで where
・どんな what
エラーが発生したのか分かるようになっていれば問題ありません。