spring提供了3種方式將異常轉(zhuǎn)化為響應
- 特定spring異常將會自動映射為指定的http狀態(tài)碼
- 異常上可以添加@responseStatus注釋,從而講將其映射為某一個http狀態(tài)碼.
- 在方法上可以添加@ExceptionHandler注釋,使其用來處理異常.
以上異常一般由spring自身拋出,作為DispatchServlet處理過程中或執(zhí)行校驗時出現(xiàn)問題的結(jié)果.
但是 ,如果多個 控制器類中都要拋出某個特定的異常,那么在所有 的控制器方法中 都要重復相同的@ExceptionHandler方法.
spring 解決方法:控制器通知
控制器通知是帶有@ControlAdvice注解的類,這個類 會包含一個或多個如下類型的方法 :
- @ExceptionHandler 注解標注的方法
- @InitBinder
- @ModelAttribute
在帶有@ControllerAdvice注解的類中 ,以上所述的這些方法會運用到 程序所有控制器 中帶有@requestMapping注解的方法上
@controlAdvice注解本身已經(jīng)使用了@component ,因此@controllerAdvice注解所標注的類將會被組件掃描獲取到(與帶有compent注解的類一樣)
@ControlAdvice最為使用的一個場景就是將所有的@ExceptionHandler方法收集到一個類中,這樣所有控制器的異常就能 在一個地方進行一致的處理 .