全局異常處理不管對于API項目還是普通管理項目都是核心的部分,如果項目中遇到運行時異常捶牢,總不能每個異常處理都去添加try catch邏輯僧须。在SpringBoot項目中跟SpringMVC的全局異常配置是一樣的怕犁,下面我們來為API項目配置全局異常并且返回相同格式的JSON字符串哨苛。
免費專題文章匯總
恒宇少年在博客整理出來了SpringBoot、ApiBoot篮赢、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】齿椅,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題】
本章目標
基于SpringBoot項目配置全局異常處理并且返回固定的JSON字符串启泣。
構(gòu)建項目
我們使用IntelliJ IDEA工具創(chuàng)建一個SpringBoot項目涣脚,事先添加依賴:Web、FastJson寥茫、Tomcat等遣蚀,pom.xml配置文件內(nèi)容如下圖1所示:
全局異常配置只需要添加一個全局的類即可,下面我們來配置全局異常Handler纱耻。
使用@ControllerAdvice
顧名思義芭梯,@ControllerAdvice注解是用來配置控制器通知的,我們可以配置過濾攔截具體一種或者多種類型的注解弄喘,添加annotations屬性即可玖喘,因為我們?nèi)址祷氐亩际荍son格式的字符串,所以需要再類上配置@ResponseBody注解蘑志,該注解熟知SpringMvc的開發(fā)人員都知道就不做過多的解釋了芒涡,RestExceptionHandler全局處理類代碼如下圖2所示:
我們在上圖2內(nèi)配置了運行時異常的方法處理,@ExceptionHandler注解用來配置需要攔截的異常類型卖漫,默認是全局類型。@ResponseStatus注解用于配置遇到該異常后返回數(shù)據(jù)時的StatusCode的值赠群,我們這里默認使用值500羊始。在類的上方我們配置了@ControllerAdvice的annotations屬性值為RestController.class,也就是只有添加了@RestController注解的控制器才會進入全局異常處理查描,下面我們來添加一個測試控制器突委。
添加測試控制器
我們創(chuàng)建一個名叫做IndexController的控制器柏卤,代碼如下圖3所示:
可以看到上圖3內(nèi),我們的請求路徑是/index/{number}匀油,這個number就是對應(yīng)int number的值缘缚,我們輸出20/number時,如果number = 0敌蚜,那么就會出現(xiàn)RuntimeException桥滨。在測試代碼之前我們需要添加一個固定返回Json的實體類ApiResult。
統(tǒng)一返回ApiResult實體
我們創(chuàng)建一個名叫ApiResult的實體弛车,代碼如下圖4所示:
這個只是一個返回對象齐媒,我們將這個類的構(gòu)造函數(shù)私有化了,所以我們在外部不能直接使用new的方式創(chuàng)建對象纷跛,我們提供了一個newInstace方法來實例化ApiResult并獲取對象喻括。下面我們創(chuàng)建一個ApiResultGenerator用來生成ApiResult不同狀態(tài)的返回內(nèi)容(成功、失斊兜臁)唬血。
ApiResultGenerator構(gòu)建者
該類是用來創(chuàng)建成功、失敗返回JSON的工具類唤崭,普通消息方法代碼如下圖5所示:
上圖5內(nèi)的方法是成功拷恨、失敗共同調(diào)用的方法,成功構(gòu)建ApiResult的方法如下圖6所示:
失敗構(gòu)建ApiResult的方法如下圖7所示:
運行測試
我們上面關(guān)于全局的異常處理已經(jīng)配置完成浩姥,下面我們來運行項目測試全局異常是否生效挑随,我們訪問地址:127.0.0.1:8080/index/20,界面輸出的效果如下圖8所示:
可以看到我們的參數(shù)number = 20時界面可以輸出內(nèi)容勒叠,那我們再來訪問地址:127.0.0.1:8080/index/0兜挨,界面輸出內(nèi)容如下圖9所示:
上圖9的內(nèi)容是我們格式化ApiResult類后的Json字符串,可以看到給我們返回了錯誤消息以及對應(yīng)的參數(shù)標識眯分,證明我們配置的全局異常已經(jīng)生效拌汇,當我們傳入number = 0時,肯定會出現(xiàn)運行時的被除數(shù)不可以為0的異常弊决,所以SpringBoot內(nèi)置SpringMVC會通過檢查是否配置全局異常來處理視圖的返回內(nèi)容噪舀。
總結(jié)
以上內(nèi)容就是本章的全部講解,本章主要講解了SpringBoot項目如何配置全局異常處理飘诗,適應(yīng)于普通SpringMVC項目以及SpringBoot項目与倡。