JavaWeb使用HandlerExceptionResolver統一異常處理

編程語言 Java JSON 工程師 編程界的小學生 編程界的小學生 2017-09-11

由於前後分離,所以這裡是統一返回JSON的格式

自定義Exception

JavaWeb使用HandlerExceptionResolver統一異常處理

自定義統一異常處理類

JavaWeb使用HandlerExceptionResolver統一異常處理

配置文件

JavaWeb使用HandlerExceptionResolver統一異常處理

運行流程分析
當你請求項目中某個接口時,如果報異常了,則會首先進入到這個自定義異常處理類中,然後通過判斷異常類型來具體給客戶端返回不同的信息提示。若接口沒報異常,則此類的方法是不會運行的。

問:為什麼要加@Order(-1000)?

答:因為Spring默認有三個異常攔截器,裡面的order屬性分別為0,1,2,會首先去這三個攔截器中找匹配的異常,若有匹配的,則不會執行我們自定義的異常處理器。

@Order(-1000)的作用就是將順序提到第一位,先加載我們的,有符合異常條件的,則不會繼續走其他三個默認的。(我們這裡一定會走,因為首先是order變成了-1000,其次是我們對自定義異常、BindException和其他做了捕獲,所以一定不會執行Spring默認的)

問:為什麼在最後添加了ex.printStackTrace();
答:一切為了調試方便,這樣可以將異常信息打印到控制檯,方便查看。

問:為什麼要判斷BindException?
答:一切為了調試方便。他會配合javax.validation.*中的註解一起用,比如客戶端傳入的參數加上了如下

JavaWeb使用HandlerExceptionResolver統一異常處理

這時候我調用接口如果id和title都不傳的話會進入我們的自定義異常處理類中去捕獲,異常類型為BindException,會返回給客戶端如下json:

JavaWeb使用HandlerExceptionResolver統一異常處理

這樣就完成了統一異常處理。若沒報異常則不會執行此方法,報異常則將異常信息返回給客戶端方便調試。

若有興趣,歡迎來加入群,【Java初學者學習交流群】:458430385,此群有Java開發人員、UI設計人員和前端工程師。有問必答,共同探討學習,一起進步!
歡迎關注我的微信公眾號【Java碼農社區】,會定時推送各種乾貨(純乾貨的東西,並非Java基礎語法這些。

JavaWeb使用HandlerExceptionResolver統一異常處理

Java碼農社區

相關推薦

推薦中...