首頁 > Java > java教程 > Spring Boot統一異常處理實例程式碼詳解

Spring Boot統一異常處理實例程式碼詳解

黄舟
發布: 2017-03-09 10:39:33
原創
1839 人瀏覽過

我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。這時候就需要統一異常處理了,這篇文章主要給大家介紹了Spring Boot如何進行統一異常處理的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

Spring Boot中預設帶了error的映射,但是這個錯誤頁面顯示給使用者並不是很友善。

統一異常處理

透過使用@ControllerAdvice定義統一異常處理的類,而不是在每個Controller中逐個定義。

@ExceptionHandler用來定義函數針對的函數類型,最後將Exception物件和請求網址對應到網址中。

@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頁面展示

在templates目錄下建立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,就能讓處理函數return的內容轉換為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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板