前置注解
@ControllerAdvice
Controller增强器,给controller增加统一的操作与处理。
@ExceptionHandler
捕获controller抛出指定类型的异常。
创建自定义异常类
@Data
public class GuiguException extends RuntimeException {private Integer code ; // 错误状态码
private String message ; // 错误消息private ResultCodeEnum resultCodeEnum ; // 封装错误状态码和错误消息
public GuiguException(ResultCodeEnum resultCodeEnum) {
this.resultCodeEnum = resultCodeEnum ;
this.code = resultCodeEnum.getCode() ;
this.message = resultCodeEnum.getMessage();
}public GuiguException(Integer code , String message) {
this.code = code ;
this.message = message ;
}}
统一异常处理类
@ControllerAdvice public class GlobalExceptionHandler { //全局异常处理 @ExceptionHandler(Exception.class) @ResponseBody public Result error(Exception e){ e.printStackTrace(); return Result.build(null , ResultCodeEnum.SYSTEM_ERROR) ; } //自定义异常处理 @ExceptionHandler(GuiguException.class) @ResponseBody public Result error(GuiguException e){ e.printStackTrace(); return Result.build(null ,e.getResultCodeEnum()) ; } }
手动抛出自定义异常
throw new GuiguException(ResultCodeEnum.LOGIN_ERROR);
枚举类
@Getter // 提供获取属性值的getter方法 public enum ResultCodeEnum { SUCCESS(200 , "操作成功") , LOGIN_ERROR(201 , "用户名或者密码错误"), VALIDATECODE_ERROR(202 , "验证码错误") , LOGIN_AUTH(208 , "用户未登录"), USER_NAME_IS_EXISTS(209 , "用户名已经存在"), SYSTEM_ERROR(9999 , "您的网络有问题请稍后重试"), NODE_ERROR( 217, "该节点下有子节点,不可以删除"), DATA_ERROR(204, "数据异常"), ACCOUNT_STOP( 216, "账号已停用"), STOCK_LESS( 219, "库存不足"), ; private Integer code ; // 业务状态码 private String message ; // 响应消息 private ResultCodeEnum(Integer code , String message) { this.code = code ; this.message = message ; } }