Spring Boot-全局異常處理(八)
阿新 • • 發佈:2018-06-29
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-全局異常處理(八)