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;
    }
}

一、@ExceptionHandlerjava

二、@ControllerAdvicemvc

三、@ResponseStatusapp

@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);
        }
    }
}

四、HandlerExceptionResolver工具

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

五、<mvc:annotation-driven/>自动将如下三个配置到Spring MVCthis

  • HandlerExceptionResolver:优先级最高
  • ResponseStatusExceptionResolver:第二
  • DefaultHandlerExceptionResolver:最低
  • SimpleMappingExceptionResolver:须要本身配置
相关文章
相关标签/搜索