Spring异常处理

  • @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
  • @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开
  • @ResponseStatus:可以将某种异常映射为HTTP状态码
@ControllerAdvice
public class ExceptionsHandler {

    //可以直接写@ExceptionHandler,不指明异常类,会自动映射
    @ExceptionHandler(CustomGenericException.class)
    public ModelAndView customGenericExceptionHnadler(CustomGenericException exception){ 
        //还可以声明接收其他任意参数
        ModelAndView modelAndView = new ModelAndView("generic_error");
        modelAndView.addObject("errCode",exception.getErrCode());
        modelAndView.addObject("errMsg",exception.getErrMsg());
        return modelAndView;
    }

    @ExceptionHandler(Exception.class)//可以直接写@EceptionHandler,IOExeption继承于Exception
    public ModelAndView allExceptionHandler(Exception exception){
        ModelAndView modelAndView = new ModelAndView("generic_error");
        modelAndView.addObject("errMsg", "this is Exception.class");
        return modelAndView;
    }
}

1、@ExceptionHandler

2、@ControllerAdvice

3、@ResponseStatus

@Controller
@RequestMapping("/exception")
public class ExceptionController {

    @RequestMapping(value = "/{type}", method = RequestMethod.GET)
    public ModelAndView getPages(@PathVariable(value = "type") String type) throws Exception{
        if ("error".equals(type)) {
            // 由handleCustomException处理
            throw new CustomGenericException("E888", "This is custom message");
        } else if ("io-error".equals(type)) {
            // 由handleAllException处理
            throw new IOException();
        } else {
            return new ModelAndView("index").addObject("msg", type);
        }
    }
}

4、HandlerExceptionResolver

  • Spring MVC提供的非常好的通用异常处理工具
  • 只能处理请求过程中抛出的异常
  • 异常处理本身所抛出的异常 、视图解析过程中抛出的异常 :不能处理
  • 可以存在多个实现了HandlerExceptionResolver的异常处理类
  • 执行顺序,由其order属性决定, order值越小,越是优先执行
  • 执行到第一个返回不是null的ModelAndView的Resolver时,结束

5、<mvc:annotation-driven/>自动将以下三个配置到Spring MVC

  • HandlerExceptionResolver:优先级最高
  • ResponseStatusExceptionResolver:第二
  • DefaultHandlerExceptionResolver:最低
  • SimpleMappingExceptionResolver:需要自己配置

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1816611
今日推荐