異常流程 :controller-ControllerAdvice-異常解析器-默認的error頁面html
1.錯誤頁面error.html:spring
程序出現異常會自動跳到error.html裏,視頻效果,該頁面可使用th:text="${exception}"顯示異常信息,但本身測試時,頁面成功顯示,但異常信息不顯示。json
2.@ExceptionHandler註解處理異常(有兩個處理同一個異常的方法,則啓動報錯;同時存在@ControllerAdvice則優先於@ControllerAdvice處理異常。)app
spring boot 默認狀況下會映射到 /error 進行異常處理,可是提示並不十分友好,下面自定義異常處理,提供友好展現。測試
3.@ControllerAdvice+.@ExceptionHandler處理異常(同時有兩個類,兩個類都會加載,對於兩個類都有同一個異常方法,最終只會執行其中一個類的方法)spa
在Controller中拋出的異常,當沒有被catch處理時,GlobalExceptionHandler中定義的處理方法能夠起做用,在方法寫明註解@ExceptionHandler,並註明其異常類便可。此種方法不只能夠做用於Controller,一樣的在DAO層、service層也可,均可以由GlobalExceptionHandler進行處理。此種寫法減小代碼的入侵,值得推薦。指針
@RequestMapping("/home") public String home(ModelMap modelMap) { System.out.println(modelMap.get("author")); } //或者 經過@ModelAttribute獲取 @RequestMapping("/home") public String home(@ModelAttribute("author") String author) { System.out.println(author); }
4.配置SimpleMappingExceptionResolver類完成異常處理rest
5.自定義HandlerExceptionResolver類處理異常(若是同時定義兩個類,只會加載其中一個類)code
public class GlobalException2 implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView modelAndView = new ModelAndView("error"); if (ex instanceof NullPointerException) { modelAndView.addObject("errors","自定義2解析器空指針N"+ex.toString()); }