【Spring】ExceptionHandler 异常处理顺序

异常处理有如下两个监控方法:

@ExceptionHandler(value = BusinessException.class)
    @ResponseBody
    public ResultVO handlerSellerException(BusinessException e) {
        return ResultVOUtil.error(e.getExceptionCode(), e.getExceptionMessage());
    }
    
    @ExceptionHandler(value = RuntimeException.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, RuntimeException e) throws Exception {
        e.printStackTrace();
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName(DEFAULT_ERROR_VIEW);
        return mav;
    }

理想状态是BusinessException异常进第一个异常处理,其它运行时异常进入第个方法处理,但是实际上跑起来全有异常都进入了第个异常处理方法,首先想到的是增加@Order来设置顺序,没效果。

网上找了下资料也没有对应有效资料说明。然后灵光一转把两个异常监控方法单独出来一个类,在类上设置@Order顺序来执行异常的顺序判断,测试正常。

代码如下:

@ControllerAdvice
@Order(2)
public class RuntimeExceptionHandler {

    public static final String DEFAULT_ERROR_VIEW = "error/error";

    @ExceptionHandler(value = RuntimeException.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, RuntimeException e) throws Exception {
        e.printStackTrace();
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName(DEFAULT_ERROR_VIEW);
        return mav;
    }
}
/**
 * 业务异常处理
 */
@Order(-2)
@ControllerAdvice
public class BaseExceptionHandler {

    @ExceptionHandler(value = BusinessException.class)
    @ResponseBody
    public ResultVO handlerSellerException(BusinessException e) {
        return ResultVOUtil.error(e.getExceptionCode(), e.getExceptionMessage());
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值