點擊上方「Java基基」,選擇「設為星標」
做積極的人,而不是積極廢人!
每天14:00更新文章,每天掉億點點頭髮...
源碼精品專欄
原創 | Java 2021超神之路,很肝~
中文詳細注釋的開源項目
RPC 框架 Dubbo 源碼解析
網絡應用框架 Netty 源碼解析
消息中間件 RocketMQ 源碼解析
數據庫中間件 Sharding-JDBC 和 MyCAT 源碼解析
作業調度中間件 Elastic-Job 源碼解析
分布式事務中間件 TCC-Transaction 源碼解析
Eureka 和 Hystrix 源碼解析
Java 並發源碼
來源:toutiao.com/
i6878184496945070604/

軟件開發springboot項目過程中,不可避免的需要處理各種異常,spring mvc 架構中各層會出現大量的try {...} catch {...} finally {...} 代碼塊,不僅有大量的冗餘代碼,而且還影響代碼的可讀性。這樣就需要定義個全局統一異常處理器,以便業務層再也不必處理異常。
基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後台管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
基於 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的後台管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

源代碼
publicclassAjaxResult{//是否成功privateBooleansuccess;//狀態碼privateIntegercode;//提示信息privateStringmsg;//數據privateObjectdata;publicAjaxResult(){}//自定義返回結果的構造方法publicAjaxResult(Booleansuccess,Integercode,Stringmsg,Objectdata){this.success=success;this.code=code;this.msg=msg;this.data=data;}//自定義異常返回的結果publicstaticAjaxResultdefineError(BusinessExceptionde){AjaxResultresult=newAjaxResult();result.setSuccess(false);result.setCode(de.getErrorCode());result.setMsg(de.getErrorMsg());result.setData(null);returnresult;}//其他異常處理方法返回的結果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 自定義異常封裝類
源碼:
publicclassBusinessExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;/***錯誤狀態碼*/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 錯誤枚舉,拒絕硬編碼
源碼
publicenumErrorEnum{//數據操作錯誤定義SUCCESS(200,"成功"),NO_PERMISSION(403,"你沒得權限"),NO_AUTH(401,"未登錄"),NOT_FOUND(404,"未找到該資源!"),INTERNAL_SERVER_ERROR(500,"服務器異常請聯繫管理員"),;/**錯誤碼*/privateIntegererrorCode;/**錯誤信息*/privateStringerrorMsg;ErrorEnum(IntegererrorCode,StringerrorMsg){this.errorCode=errorCode;this.errorMsg=errorMsg;}publicIntegergetErrorCode(){returnerrorCode;}publicStringgetErrorMsg(){returnerrorMsg;}}4 全局異常處理類
源碼
/***全局異常處理器**/@RestControllerAdvicepublicclassGlobalExceptionHandler{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 測試
返回結果:

歡迎加入我的知識星球,一起探討架構,交流源碼。加入方式,長按下方二維碼噢:
已在知識星球更新源碼解析如下:
最近更新《芋道 SpringBoot 2.X 入門》系列,已經 101 余篇,覆蓋了MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內容。
提供近 3W 行代碼的 SpringBoot 示例,以及超 6W 行代碼的電商微服務項目。
獲取方式:點「在看」,關注公眾號並回復666領取,更多內容陸續奉上。
文章有幫助的話,在看,轉發吧。
謝謝支持喲 (*^__^*)