Web アプリケーションを作成している場合、リクエストの処理中にエラーが発生することが非常によくあります。このとき、統合された例外処理が必要になります。この記事では、Spring Boot がどのように統合された例外処理を実装するかについての関連情報を中心に紹介します。
Spring Boot にはデフォルトでエラー マッピングがありますが、このエラー ページはあまり使いやすいものではありません。
統一例外処理
統一例外処理のクラスを、各コントローラーで 1 つずつ定義するのではなく、@ControllerAdvice を使用して定義します。
@ExceptionHandler は、関数が対象とする関数の型を定義するために使用され、最後に Exception オブジェクトとリクエスト URL を URL にマッピングします。
@ControllerAdvice class ExceptionTranslator { public static final String DEFAULT_ERROR_VIEW = "error"; @ExceptionHandler(value = Exception.class) public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.addObject("url", req.getRequestURL()); mav.setViewName(DEFAULT_ERROR_VIEW); return mav; } }
error.htmlページ表示を実装
テンプレートディレクトリにerror.htmlを作成します。
例:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" /> <title>统一异常处理</title> </head> <body> <h1>Error Handler</h1> <p th:text="${url}"></p> <p th:text="${exception.message}"></p> </body> </html>
Json形式を使用して返します
@ExceptionHandlerの後に@ResponseBodyを追加するだけで、処理関数によって返されたコンテンツをJSON形式に変換します
JSON戻りオブジェクトを作成します。 :
public class ErrorDTO implements Serializable { private static final long serialVersionUID = 1L; private final String message; private final String description; private List<FieldErrorDTO> fieldErrors; //getter和setter省略 }
指定したExceptionに対する例外処理を追加できます
@ExceptionHandler(ConcurrencyFailureException.class) @ResponseStatus(HttpStatus.CONFLICT) @ResponseBody public ErrorDTO processConcurencyError(ConcurrencyFailureException ex) { return new ErrorDTO(ErrorConstants.ERR_CONCURRENCY_FAILURE); }
ErrorConstants.ERR_CONCURRENCY_FAILUREは定義された例外メッセージです。
概要
以上がSpring Boot統合例外処理サンプルコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。