前言
軟件開發(fā)springboot項(xiàng)目過程中,不可避免的需要處理各種異常,spring mvc 架構(gòu)中各層會出現(xiàn)大量的try {...} catch {...} finally {...}代碼塊,不僅有大量的冗余代碼,而且還影響代碼的可讀性。這樣就需要定義個全局統(tǒng)一異常處理器,以便業(yè)務(wù)層再也不必處理異常。
推薦理由
- 代碼復(fù)制到項(xiàng)目中通過簡單的配置即可實(shí)現(xiàn)
- 可以靈活的根據(jù)自己的業(yè)務(wù)異常進(jìn)行更細(xì)粒度的擴(kuò)展
1 封裝統(tǒng)一返回結(jié)果類實(shí)踐
![dd88112c-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxaAIbfMAAEErObHVc4036.png)
publicclassAjaxResult{ //是否成功 privateBooleansuccess; //狀態(tài)碼 privateIntegercode; //提示信息 privateStringmsg; //數(shù)據(jù) privateObjectdata; publicAjaxResult(){ } //自定義返回結(jié)果的構(gòu)造方法 publicAjaxResult(Booleansuccess,Integercode,Stringmsg,Objectdata){ this.success=success; this.code=code; this.msg=msg; this.data=data; } //自定義異常返回的結(jié)果 publicstaticAjaxResultdefineError(BusinessExceptionde){ AjaxResultresult=newAjaxResult(); result.setSuccess(false); result.setCode(de.getErrorCode()); result.setMsg(de.getErrorMsg()); result.setData(null); returnresult; } //其他異常處理方法返回的結(jié)果 publicstaticAjaxResultotherError(ErrorEnumerrorEnum){ AjaxResultresult=newAjaxResult(); result.setMsg(errorEnum.getErrorMsg()); result.setCode(errorEnum.getErrorCode()); result.setSuccess(false); result.setData(null); returnresult; } publicBooleangetSuccess(){ returnsuccess; } publicvoidsetSuccess(Booleansuccess){ this.success=success; } publicIntegergetCode(){ returncode; } publicvoidsetCode(Integercode){ this.code=code; } publicStringgetMsg(){ returnmsg; } publicvoidsetMsg(Stringmsg){ this.msg=msg; } publicObjectgetData(){ returndata; } publicvoidsetData(Objectdata){ this.data=data; } }
2 自定義異常封裝類
![dda69bc4-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxaAHWMLAAHLn1qiYe0282.png)
publicclassBusinessExceptionextendsRuntimeException{ privatestaticfinallongserialVersionUID=1L; /** *錯誤狀態(tài)碼 */ protectedIntegererrorCode; /** *錯誤提示 */ protectedStringerrorMsg; publicBusinessException(){ } publicBusinessException(IntegererrorCode,StringerrorMsg){ this.errorCode=errorCode; this.errorMsg=errorMsg; } publicIntegergetErrorCode(){ returnerrorCode; } publicvoidsetErrorCode(IntegererrorCode){ this.errorCode=errorCode; } publicStringgetErrorMsg(){ returnerrorMsg; } publicvoidsetErrorMsg(StringerrorMsg){ this.errorMsg=errorMsg; } }
3 錯誤枚舉,拒絕硬編碼
![ddd2868a-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxaAdGQWAAH5HK-4Ybo087.png)
publicenumErrorEnum{ //數(shù)據(jù)操作錯誤定義 SUCCESS(200,"成功"), NO_PERMISSION(403,"你沒得權(quán)限"), NO_AUTH(401,"未登錄"), NOT_FOUND(404,"未找到該資源!"), INTERNAL_SERVER_ERROR(500,"服務(wù)器異常請聯(lián)系管理員"), ; /**錯誤碼*/ privateIntegererrorCode; /**錯誤信息*/ privateStringerrorMsg; ErrorEnum(IntegererrorCode,StringerrorMsg){ this.errorCode=errorCode; this.errorMsg=errorMsg; } publicIntegergetErrorCode(){ returnerrorCode; } publicStringgetErrorMsg(){ returnerrorMsg; } }
4 全局異常處理類
![de43c976-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxeASCWYAAIvKV7mkE4615.png)
/** *全局異常處理器 * */ @RestControllerAdvice publicclassGlobalExceptionHandler { privatestaticfinalLoggerlog=LoggerFactory.getLogger(GlobalExceptionHandler.class); /** *處理自定義異常 */ @ExceptionHandler(value=BusinessException.class) publicAjaxResultbizExceptionHandler(BusinessExceptione){ log.error(e.getMessage(),e); returnAjaxResult.defineError(e); } /** *處理其他異常 */ @ExceptionHandler(value=Exception.class) publicAjaxResultexceptionHandler(Exceptione){ log.error(e.getMessage(),e); returnAjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR); } }
5 測試
![de55a704-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxeAQsUYAAG-HlByE1E143.png)
返回結(jié)果:
![de7fe9d8-b37d-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/98/C9/wKgZomTnaxeAFJy6AABew7sLo6g504.png)
審核編輯 :李倩
-
軟件開發(fā)
+關(guān)注
關(guān)注
0文章
615瀏覽量
27375 -
代碼
+關(guān)注
關(guān)注
30文章
4791瀏覽量
68694 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
515瀏覽量
25491
原文標(biāo)題:公司這套架構(gòu)統(tǒng)一處理 try...catch 真香!
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
面向NXP i.MX8處理器的電源解決方案
![面向NXP i.MX8<b class='flag-5'>處理</b>器的電源解決方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TPS659118 66AK2G02處理器用戶指南
![TPS659118 66AK2G02<b class='flag-5'>處理</b>器用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ADS8361與TMS470處理器的接口
![ADS8361與TMS470<b class='flag-5'>處理</b>器的接口](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
運(yùn)放的調(diào)零處理方法有哪些?
基于全志V853處理器的智能輔助駕駛算法介紹
![基于全志V853<b class='flag-5'>處理</b>器的智能輔助駕駛算法介紹](https://file1.elecfans.com/web2/M00/07/4D/wKgaombk5aqAfTlmAAAuABGoxC8054.jpg)
使用TPS6521815 PMIC為NXP i.MX 7處理器供電
![使用TPS6521815 PMIC為NXP i.MX 7<b class='flag-5'>處理</b>器供電](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
高通驍龍6 Gen 3處理器發(fā)布
一站式統(tǒng)一返回值封裝、異常處理、異常錯誤碼解決方案—最強(qiáng)的Sping Boot接口優(yōu)雅響應(yīng)處理器
龍芯CPU統(tǒng)一系統(tǒng)架構(gòu)規(guī)范及參考設(shè)計(jì)下載
適用于ARM Cortex?—A53處理器A53處理器和FPGA的集成電源管理IC TPS65220數(shù)據(jù)表
![適用于ARM Cortex?—A53<b class='flag-5'>處理</b>器A53<b class='flag-5'>處理</b>器和FPGA的集成電源管理IC TPS65220數(shù)據(jù)表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論