spring boot -thymeleaf-異常處理

異常流程 :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進行處理。此種寫法減小代碼的入侵,值得推薦。指針

若是所有異常處理返回json,那麼可使用 @RestControllerAdvice 代替 @ControllerAdvice ,這樣在方法上就能夠不須要添加 @ResponseBody。

在spring 3.2中,新增了@ControllerAdvice 註解,能夠用於定義@ExceptionHandler、@InitBinder、@ModelAttribute,並應用到全部@RequestMapping中。

@ModelAttribute:在Model上設置的值,對於全部被 @RequestMapping 註解的方法中,均可以經過 ModelMap 獲取,以下:

@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());
        }
相關文章
相關標籤/搜索