封装全局异常处理
1.定义业务异常类
作用:
1.相对于java的异常类,支持更多字段
2.自定义构造函数,更灵活/快捷的设置字段
/** * 自定义异常类 * @author LL */ public class BusinessException extends RuntimeException{ private final int code; private final String description; public BusinessException(String message, int code, String description) { super(message); this.code = code; this.description = description; } public BusinessException(ErrorCode errorCode) { super(errorCode.getMessage()); this.code = errorCode.getCode(); this.description = errorCode.getDescription(); } public BusinessException(ErrorCode errorCode, String description) { super(errorCode.getMessage()); this.code = errorCode.getCode(); this.description = description; } public int getCode() { return code; } public String getDescription() { return description; } }
遇到错误不再return,直接抛出异常
//1.校验 if(StringUtils.isAnyBlank(userAccount,userPassword,checkPassword,planetCode)){ throw new BusinessException(ErrorCode.PARAMS_ERROR,"参数为空"); } if (userAccount.length()<4){ throw new BusinessException(ErrorCode.PARAMS_ERROR,"用户账户过短"); } if (userPassword.length()<8||checkPassword.length()<8){ throw new BusinessException(ErrorCode.PARAMS_ERROR,"用户密码过短"); } if (planetCode.length()>5){ throw new BusinessException(ErrorCode.PARAMS_ERROR,"编号过长"); }
2.编写全局异常处理器
作用:
1.捕获代码中所有的异常,内容消化,让前端得到更详细的业务报错/信息
2.同时屏蔽掉项目框架本身的异常(不暴露服务器内部状态)
3.集中处理,比如记录日志
/** * 全局异常处理器 */ //SpringAOP注解:在调用方法前后进行额外的处理 @RestControllerAdvice @Slf4j public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public BaseResponse businessException(BusinessException e){ log.error("businessException:"+e.getDescription(),e.getDescription()); return ResultUtils.error(e.getCode(),e.getMessage(),e.getDescription()); } @ExceptionHandler(RuntimeException.class) public BaseResponse runtimeException(RuntimeException e){ log.error("runtimeException",e); return ResultUtils.error(ErrorCode.SYSTEM_ERROR,e.getMessage(),""); } }
标签:BusinessException,code,封装,description,errorCode,Java,全局,异常,public From: https://www.cnblogs.com/galo/p/16750185.html