统一异常处理@ExceptionHandler

Posted bcombettter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统一异常处理@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);  
        }  
      
    }  

 

以上是关于统一异常处理@ExceptionHandler的主要内容,如果未能解决你的问题,请参考以下文章

统一异常处理@ExceptionHandler

@ExceptionHandler和@ControllerAdvice统一处理异常

统一异常处理@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

springboot定义统一的返回异常提示数据格式

用@ExceptionHandler 来进行异常处理

Spring Boot2 系列教程 (十四) | 统一异常处理