Chapter 30

システム共通例外発生画面

kazpgm
kazpgm
2021.12.27に更新
このチャプターの目次

システム共通例外発生画面

CustomControllerAdvice.java(システム共通例外処理クラス)


・当システムで、例外が発生した時★01は、controller.CustomControllerAdviceクラスにより、エラー画面が表示されます。★02(ControllerAdviceアノテーションを適用したクラス内★03で、引数に例外クラスを指定したExceptionHandlerアノテーション★04を付与したメソッドが、エラー処理を行うため)

package com.kaz01u.demo.controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import lombok.extern.slf4j.Slf4j;
/**
 * すべてのコントローラーに共通する例外処理クラス(ControllerAdviceクラス)
 * 共通例外画面(”システムに問題が発生しました”)を表示する。
 *
 */
@ControllerAdvice
//log出力用
@Slf4j
public class CustomControllerAdvice {
    @ExceptionHandler

・handleException(Throwable e)によって、ExceptionとErrorを拾うことになる。
・Error(メモリーオーバーフローなどの、システム重大エラー)を拾うのはシステムのような気がするが、拾わないと、「Whitelabel Error Page」スタックトレース画面になってしまうので拾うことにする。
 ・・・これが正しい方法かはちょっとわからない。ほかに、スタックトレースをユーザーに見せない方法があればそれでも良いと思う。

    public String handleException(Throwable e) {
        log.error("System Error occurred.", e);

・例外をキャッチしないで、このロジックに来た場合、スタックトレースが出ていないため。ここで出す。

        e.printStackTrace();
        return "error/error.html";
    }
}

templates\error\error.html(システム共通例外画面テンプレート)★05

・一般的なエラー画面です。

<!DOCTYPE html>
<html lang="ja"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
    <meta charset="UTF-8">
    <title>エラー</title>
  </head>
  <body>
      <h1>システムに問題が発生しました</h1>
    <a th:href="@{/}">ログイン</a>
  </body>
</html>