由於前後分離,所以這裡是統一返回JSON的格式
自定義Exception
自定義統一異常處理類
配置文件
運行流程分析
當你請求項目中某個接口時,如果報異常了,則會首先進入到這個自定義異常處理類中,然後通過判斷異常類型來具體給客戶端返回不同的信息提示。若接口沒報異常,則此類的方法是不會運行的。
問:為什麼要加@Order(-1000)?
答:因為Spring默認有三個異常攔截器,裡面的order屬性分別為0,1,2,會首先去這三個攔截器中找匹配的異常,若有匹配的,則不會執行我們自定義的異常處理器。
@Order(-1000)的作用就是將順序提到第一位,先加載我們的,有符合異常條件的,則不會繼續走其他三個默認的。(我們這裡一定會走,因為首先是order變成了-1000,其次是我們對自定義異常、BindException和其他做了捕獲,所以一定不會執行Spring默認的)
問:為什麼在最後添加了ex.printStackTrace();
答:一切為了調試方便,這樣可以將異常信息打印到控制檯,方便查看。
問:為什麼要判斷BindException?
答:一切為了調試方便。他會配合javax.validation.*中的註解一起用,比如客戶端傳入的參數加上了如下
這時候我調用接口如果id和title都不傳的話會進入我們的自定義異常處理類中去捕獲,異常類型為BindException,會返回給客戶端如下json:
這樣就完成了統一異常處理。若沒報異常則不會執行此方法,報異常則將異常信息返回給客戶端方便調試。
若有興趣,歡迎來加入群,【Java初學者學習交流群】:458430385,此群有Java開發人員、UI設計人員和前端工程師。有問必答,共同探討學習,一起進步!
歡迎關注我的微信公眾號【Java碼農社區】,會定時推送各種乾貨(純乾貨的東西,並非Java基礎語法這些。