当前位置: 首页 > 科技观察

公司的结构是统一处理try...catch的,所以请不要满屏写,然后发现扣性能!

时间:2023-03-16 14:05:48 科技观察

前言在软件开发springboot项目的过程中,难免要处理各种异常,会出现大量的try{...}catch{...}finally{...}代码块在springmvc架构的每一层中,不仅有大量的冗余代码,而且影响了代码的可读性。这样就需要定义一个全局统一的异常处理器,让业务层不再需要处理异常。将推荐原因码复制到项目中,通过简单的配置即可实现。大家可以根据自己的业务异常,灵活的进行更细粒度的扩展实践。//提示信息privateStringmsg;//dataprivateObjectdata;publicAjaxResult(){}//自定义返回结果构造方法publicAjaxResult(Booleansuccess,Integercode,Stringmsg,Objectdata){this.success=success;this.code=code;this.msg=msg;this.data=data;}//自定义异常返回的结果.setMsg(de.getErrorMsg());result.setData(null);returnresult;}//其他异常处理方法返回的结果;结果.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;/***错误提示*/protectedSpublicBusinessException(){}publicBusinessException(IntegererrorCode,StringerrorMsg){this.errorCode=errorCode;this.errorMsg=errorMsg;}publicIntegergetErrorCode(){returnerrorCode;}publicvoidsetErrorCode(IntegererrorCode){this.errorCode=errorCode;}publicStringgetErrorMsg(){returnerrorMsg;}publicvoidsetErrorMsg(StringerrorMsg){this.errorMsg)3error,拒绝硬编码的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.错误(e.getMessage(),e);returnAjaxResult.defineError(e);}/***处理其他异常**/@ExceptionHandler(value=Exception.class)publicAjaxResultexceptionHandler(Exceptione){log.error(e.getMessage(),e);returnAjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);}}5测试返回结果: