婚纱摄影网站定制,姑苏区最新通告,微信公众平台小程序是什么,无锡网站建设营销型文章目录 1 定义错误码类2 定义业务异常类3 全局异常处理器4 使用5 前端请求效果总结 1 定义错误码类
可以定义各种错误码枚举#xff0c;比如业务#xff0c;系统相关的报错信息
/*** 错误代码* 错误码** author leovany* date 2023/09/23*/
public enum ErrorCode {SU… 文章目录 1 定义错误码类2 定义业务异常类3 全局异常处理器4 使用5 前端请求效果总结 1 定义错误码类
可以定义各种错误码枚举比如业务系统相关的报错信息
/*** 错误代码* 错误码** author leovany* date 2023/09/23*/
public enum ErrorCode {SUCCESS(0, success, ),ERROR_PARAMS(40000, 请求参数错误, ),ERROR_NULL(40001, 请求数据为空, ),ERROR_LOGIN(40100, 未登录, ),ERROR_NO_AUTH(41001, 无权限, ),ERROR_SYSTEM(50000, 系统内部异常, );/*** 错误码ID*/private final int code;/*** 错误码信息*/private final String message;/*** 错误码描述详情*/private final String description;ErrorCode(int code, String message, String description) {this.code code;this.message message;this.description description;}public int getCode() {return code;}public String getMessage() {return message;}public String getDescription() {return description;}
}
2 定义业务异常类 相对于 java 的异常类支持更多字段 扩展了 code和description两个字段 自定义构造函数更灵活 / 快捷的设置字段
import com.leovany.usercenter.common.ErrorCode;/*** 业务异常* 自定义业务异常类** author leovany* date 2023/09/23*/
public class BusinessException extends RuntimeException {/*** 错误码*/private final int code;/*** 描述*/private final String description;/*** 业务异常** param message 信息* param code 错误码* param description 描述*/public BusinessException(String message, int code, String description) {super(message);this.code code;this.description description;}/*** 业务异常** param errorCode 错误代码*/public BusinessException(ErrorCode errorCode) {super(errorCode.getMessage());this.code errorCode.getCode();this.description errorCode.getDescription();}/*** 业务异常** param errorCode 错误代码* param description 描述*/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;}
}
3 全局异常处理器 通过Spring AOP实现在调用方法前后进行额外的处理 作用 捕获代码中所有的异常让前端得到更详细的业务报错信息屏蔽掉项目框架本身的异常不暴露服务器的内部状态集中处理比如还可以做记录日志
import com.leovany.usercenter.common.ResultVO;
import com.leovany.usercenter.common.ErrorCode;
import com.leovany.usercenter.common.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** 全局异常处理类*/
RestControllerAdvice
Slf4j
public class GlobalExceptionHandler {/*** 处理异常-BusinessException* param e* return*/ExceptionHandler(BusinessException.class)public ResultVO? businessExceptionHandler(BusinessException e){log.error(businessException: e.getMessage(),e);return ResultUtils.error(e.getCode(),e.getMessage(),e.getDescription());}/*** 处理异常-RuntimeException* param e* return*/ExceptionHandler(RuntimeException.class)public ResultVO? runtimeExceptionHandler(RuntimeException e){log.error(runtimeException: e);return ResultUtils.error(ErrorCode.ERROR_SYSTEM,e.getMessage());}
}
4 使用
throw new BusinessException可以在方法中任意地方抛出很方便
示例代码
PostMapping(/login)
public ResultVOUser userLogin(RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {String userAccount userLoginRequest.getUserAccount();String userPassword userLoginRequest.getUserPassword();if (StringUtils.isAnyBlank(userAccount, userPassword)) {throw new BusinessException(ErrorCode.ERROR_PARAMS);}User user userService.doLogin(userAccount, userPassword, request);return ResultUtils.success(user);
}代码对比 5 前端请求效果 总结
通过封装全局异常处理对异常信息做了统一处理让前端得到更详细的业务信息同时保证系统的安全性不会暴露系统内部信息在代码上对参数校验等方面提供更加方便的形式。