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:須要本身配置
相關文章
相關標籤/搜索