统一异常处理和自定义异常

  1. 使用@ControllerAdvice和@ExceptionHandler注解

    /**
     * @author 旺旺米雪饼
     */
    @RestControllerAdvice
    @Slf4j
    public class GlobalException {
        @ExceptionHandler(value = BJFUException.class)
        public Result<String> exception(BJFUException e) {
            log.error("全局异常处理器捕获到自定义异常!{},message:{},stack:{}", e, e.getMessage(), e.toString());
            return new Result<>(ResultEnum.SYSTEM_ERROR, e.getMessage());
        }
    }
    

    @ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常,比如上面的BJFUException.class是一个自定义的异常类。

/**
 * @author 旺旺米雪饼
 */
public class BJFUException extends Exception {
    /**
     * 无参构造函数
     */
    public BJFUException() {
        super();
    }
    /**
     * 用详细信息指定一个异常
     *
     * @param message
     */
    public BJFUException(String message) {
        super(message);
    }
    /**
     * 用指定的详细信息和原因构造一个新的异常
     *
     * @param message
     * @param cause
     */
    public BJFUException(String message, Throwable cause) {
        super(message, cause);
    }
    /**
     * 用指定原因构造一个新的异常
     *
     * @param cause
     */
    public BJFUException(Throwable cause) {
        super(cause);
    }
}

此时注解的参数是BJFUException.class,表示只有方法抛出BJFUException.class类里定义的异常时,才会调用该方法。

我们可以在controller层来抛出BJFUException

if (userId < 0) {
    throw new BJFUException("参数id不合法");
}

2.自定义异常

自定义异常通常和全局异常一起使用,自定义异常可以继承自RuntimeException、BaseException等基本异常类。

例如:

/**
 * 用户信息异常类
 */
public class UserException extends BaseException {
    private static final long serialVersionUID = 1L;

    public UserException(String code, Object[] args)
    {
        super("user", code, args, null);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值