当前位置: 首页 > 后端技术 > Java

请不要满屏写try...catch,这才是优雅的处理方式,太香了!

时间:2023-04-02 01:01:34 Java

作者:小李子说程序\来源:https://www.toutiao.com/i6878...前言在软件开发springboot项目的过程中,难免要处理各种异常,而其中的每一层springmvc架构会有很多try{...}catch{...}finally{...}代码块,不仅有很多冗余代码,而且影响代码的可读性。我不会介绍SpringBoot的基础知识。推荐这个实用教程:https://github.com/javastacks...这样,就需要定义一个全局统一的异常处理器,让业务层不再需要处理异常。将推荐的原因码复制到项目中,通过简单的配置即可实现。大家可以根据自己的业务异常,灵活的进行更细粒度的扩展实践。1统一封装并返回结果类源码publicclassAjaxResult{//SuccessprivateBooleansuccess;//状态码privateIntegercode;//提示信息privateStringmsg;//数据私有对象数据;publicAjaxResult(){}//自定义返回结果的构造方法publicAjaxResult(Booleansuccess,Integercode,Stringmsg,Objectdata){this.success=success;这个。代码=代码;this.msg=味精;这个。数据=数据;}//自定义异常返回的结果publicstaticAjaxResultdefineError(BusinessExceptionde){AjaxResultresult=newAjaxResult();结果.setSuccess(false);结果.setCode(de.getErrorCode());结果.setMsg(de.getErrorMsg());结果.setData(null);返回结果;}//其他异常处理方法返回publicstaticAjaxResultotherError(ErrorEnumerrorEnum){AjaxResultresult=newAjaxResult();结果.setMsg(errorEnum.getErrorMsg());结果.setCode(errorEnum.getErrorCode());结果.setSuccess(false);结果.setData(null);返回结果;}publicBooleangetSuccess(){返回成功;}publicvoidsetSuccess(Booleansuccess){this.success=success;}publicIntegergetCode(){返回代码;}publicvoidsetCode(Integercode){this.code=code;}publicStringgetMsg(){返回消息;}publicvoidsetMsg(Stringmsg){this.msg=msg;}publicObjectgetData(){返回数据;}publicvoidsetData(Objectdata){this.data=data;}}2自定义异常封装类源码:publicclassBusinessExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;/***错误状态码*/protectedIntegererrorCode;/***错误提示*/protectedStringerrorMsg;publicBusinessException(){}publicBusinessException(IntegererrorCode,StringerrorMsg){this.errorCode=errorCode;this.errorMsg=errorMsg;}publicIntegergetErrorCode(){返回错误代码;}公共无效setErrorCode(整数错误代码){this.errorCode=errorCode;}publicStringgetErrorMsg(){返回错误信息;}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.errorMsg=errorMsg;}publicIntegergetErrorCode(){返回错误代码;}publicStringgetErrorMsg(){返回错误信息;}}4全局异常处理类源码/***全局异常处理器**/@RestControllerAdvicepublicclassGlobalExceptionHandler{privatestaticfinalLoggerlog=LoggerFactory.getLogger(GlobalExceptionHandler.class);/***处理自定义异常**/@ExceptionHandler(value=BusinessException.class)publicAjaxResultbizExceptionHandler(BusinessExceptione){log.error(e.getMessage(),e);返回AjaxResult.defineError(e);}/***处理其他异常**/@ExceptionHandler(value=Exception.class)publicAjaxResultexceptionHandler(Exceptione){log.error(e.getMessage(),e);返回AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);}}5测试返回结果:近期热点文章推荐:1.1、000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。.3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!