1. 程式人生 > >Spring Boot-全局異常處理(八)

Spring Boot-全局異常處理(八)

set temp ajax tac itl resp produce lec div

SpringBoot默認異常默認處理機制

Spring boot錯誤異常時通過BasicErrorController來處理的

通過判斷是瀏覽器請求還是ajax請求響應頁面或者json

BasicErrorController部分源碼

@RequestMapping(
        produces = {"text/html"}
    )
    public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
        HttpStatus status 
= this.getStatus(request); Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML))); response.setStatus(status.value()); ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
return modelAndView != null ? modelAndView : new ModelAndView("error", model); } @RequestMapping @ResponseBody public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { Map<String, Object> body = this.getErrorAttributes(request, this
.isIncludeStackTrace(request, MediaType.ALL)); HttpStatus status = this.getStatus(request); return new ResponseEntity(body, status); }

可以看到 只要是發生生異常瀏覽器請求 都會默認返回error頁面

技術分享圖片

覆蓋springboot默認異常處理的異常頁面

1.在resources/templates 下新增一個error html則可以對默認的error進行覆蓋

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
動態error錯誤頁面
<p th:text="${error}"></p>
<p th:text="${status}"></p>
<p th:text="${message}"></p>
</body>
</html>

發生錯則打印

技術分享圖片

2.如果想對異常進行更細的劃分 比如404 跳轉到404的錯誤頁面 500跳轉到500的錯誤頁面

只需要在resources/templates/error 新建對應的編碼的頁面

技術分享圖片

自定義異常

局部異常

全局異常

Spring Boot-全局異常處理(八)