统一异常处理@ExceptionHandler


异常处理功能中用到的注解是:@ExceptionHandler(异常类型.class). 
这个注解的功能是:自动捕获controller层出现的指定类型异常,并对该异常进行相应的异常处理. 
比如我要在controller层中处理InsertMessageException类型异常,我就可以在controller层的类中定义以下方法:

@ExceptionHandler(InsertMessageException.class)
public ModelAndView HandlerInsertMessageException(Exception ex){
    ModelAndView modelAndView= new ModelAndException();
    //相应的处理方法
    //...
    //...
    //比如说获取异常信息,并添加到modelandview中,跳转到指定异常页面
    modelAndView.addObject("exceptionMessage",ex.getMessage());
    modelAndView.setViewName("/exceptionPage");
    return modelAndView;
}

通过这样一个被@ExceptionHandler注解修饰的方法,就能捕获controller层所有抛出的InsertMessageException类型异常,并对异常进行相应的处理

如果想一个方法处理多种类型异常,就需要在@ExceptionHandler的括号中用大括号添加所想要处理的异常类型,用”,”隔开 
例如:@ExceptionHandler({InsertException.class,DeleteException.class})

 

 

===

使用 @ControllerAdvice,不用任何的配置,只要把这个类放在项目中,Spring能扫描到的地方。就可以实现全局异常的回调

   @ControllerAdvice  
    public class SpringExceptionHandler{  
      /** 
         * 全局处理Exception 
         * 错误的情况下返回500 
         * @param ex 
         * @param req 
         * @return 
         */  
        @ExceptionHandler(value = {Exception.class})  
        public ResponseEntity<Object> handleOtherExceptions(final Exception ex, final WebRequest req) {  
            TResult tResult = new TResult();  
            tResult.setStatus(CodeType.V_500);  
            tResult.setErrorMessage(ex.getMessage());  
            return new ResponseEntity<Object>(tResult,HttpStatus.OK);  
        }  
      
    }  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM