SpringBoot中异常处理

SpringBoot有两种处理异常的方式:

1.使用@ControllerAdvice和@ExceptionHandler处理全局异常
这种方式只能处理进入控制器的异常
2.使用@ErrorController类
这种方式可以处理全部异常,包括没进入控制器的异常。
在这里插入图片描述
下面主要记录一下第一种处理异常的方式:

要创建几个类:

1.公共返回对象
2.公共返回对象枚举
3.全局异常类
4.处理全局异常类

/**
 * Description:公共返回对象
 * Date: 2022/6/28 14:51
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResponseBean {
    private long code;
    private String message;
    private Object obj;
    /**
     * 成功返回结果
     * */
    public static ResponseBean success(){
        return new ResponseBean(ResponseBeanEnum.success.getCode(),ResponseBeanEnum.success.getMessage(),null);
    }
    /**
     * 重载上面的方法
     * */
    public static ResponseBean success(Object obj){
        return new ResponseBean(ResponseBeanEnum.success.getCode(),ResponseBeanEnum.success.getMessage(),obj);
    }
    /**
     * 失败返回结果
     * */
    public static ResponseBean error(ResponseBeanEnum responseBeanEnum){
        return new ResponseBean(responseBeanEnum.getCode(),responseBeanEnum.getMessage(),null);
    }
    /**
     * 失败返回结果
     * */
    public static ResponseBean error(ResponseBeanEnum responseBeanEnum,Object obj){
        return new ResponseBean(responseBeanEnum.getCode(),responseBeanEnum.getMessage(),obj);
    }
}
/**
 * Description:公共返回对象枚举
 * Date: 2022/6/28 14:51
 **/
@Getter
@AllArgsConstructor
@ToString
public enum  ResponseBeanEnum {
//   通用
    success(0,"SUCCESS"),
    ERROR(500,"服务端异常"),
//    登录模块
    LOGIN_ERROR(500210,"手机号或密码错误"),
    PHONE_ERROR(500211,"手机号码格式不正确"),
    LOGIN_IS_NOT_NULL(500212,"手机号或密码不能为空"),
    BINDING_ERROR(500213,"参数校验异常")
    ;
    private final Integer code;
    private final String message;

}
/**
 * Description:全局异常类
 * Date: 2022/6/28 17:28
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GlobalException extends RuntimeException{

    private ResponseBeanEnum responseBeanEnum;

}
/**
 * Description:全局异常处理类
 * Date: 2022/6/28 17:35
 **/
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseBean ExceptionHandler(Exception e){
        if(e instanceof GlobalException){
            GlobalException ex= (GlobalException) e;
            return ResponseBean.error(ex.getResponseBeanEnum());
//			处理参数校验抛出的异常 BindException            
        }else if(e instanceof BindException){
            BindException ex= (BindException) e;
            ResponseBean res=ResponseBean.error(ResponseBeanEnum.BINDING_ERROR);
            res.setMessage("参数校验异常:"+ex.getAllErrors().get(0).getDefaultMessage());
            return res;

        }
        return ResponseBean.error(ResponseBeanEnum.ERROR);
    }
}

5.使用
比如在service层验证用户是否存在

//        根据手机号验证用户是否存在
        User user = userMapper.selectByPhone(mobile);
        if(user==null){
            throw new GlobalException(ResponseBeanEnum.LOGIN_ERROR);
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值