码迷,mamicode.com
首页 > 其他好文 > 详细

统一异常处理@ExceptionHandler

时间:2018-03-22 14:36:24      阅读:4302      评论:0      收藏:0      [点我收藏+]

标签:信息   status   request   page   val   配置   class   final   advice   

异常处理功能中用到的注解是:@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

标签:信息   status   request   page   val   配置   class   final   advice   

原文地址:https://www.cnblogs.com/xingzc/p/8623490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!