浅谈--Spring MVC的统一处理异常机制

1、统一处理异常机制

       在Spring MVC中,统一处理异常的机制具体表现为:无论是哪个处理请求的过程中出现异常,每种类型的异常只需要编写一段处理异常的代码即可!

2、统一处理异常机制的实现

统一处理异常的核心是定义处理异常的方法。在Spring MVC框架中,处理请求的方法都是被框架所调用的,所以,处理请求的方法抛出的异常也都会被框架捕获到,则框架会自动的使用此异常对象来调用处理异常的方法!类似于:

try{
    框架.addNew();//框架调用了控制器类中处理异常的方法
} catch (ServiceException e){
    框架.handleServiceException(e);//框架调用了处理异常的方法
}

在使用Spring MVC框架时,可以在类上添加@RestControllerAdvice注解,此类中特定的方法(例如统一处理异常的方法)将可以作用于整个项目中任何处理请求的过程中!

2.1 关于统一处理异常的类

该类必须在组件扫描的包下,在类上添加@ControllerAdvice / @RestControllerAdvice注解。

2.2关于统一处理异常的方法

在类中自定义处理异常的方法:

  • 注解:@ExceptionHandler,表示此方法是处理异常的方法;可以在注解参数中指定需要处理的异常类型,此注解参数是数组,可指定多个异常类型。若未指定注解参数,则处理的异常类型以方法的参数中的异常类型为准。
  • 访问权限:应该使用public
  • 返回值类型:可参考处理请求的方法,例如:JsonResult类型
  • 方法名称:自定义
  • 参数列表:至少有1个被处理的异常类型参数,可按需添加特定类型的参数,例如HttpServletRequest、HttpServletResponse等,但不可以像处理请求的方法那么随意。

注意: 可以有多个处理异常的方法,但各方法处理的异常类型必须不同;各方法处理的异常类型允许存在继承关系,例如A方法处理NullPointerException,B方法处理RuntimeException,C方法处理Throwable。强烈推荐存在一个处理Throwable的方法,避免有异常不被处理。

例如:

@RestControllerAdvice
public class GlobalExceptionHandler {  
  
    @ExceptionHandler
    public JsonResult handleBindException(BindException e){
        log.warn("程序运行过程中出现BindException,将统一处理!");
        log.warn("异常信息:{}",e.getMessage());
        return JsonResult.fail(ServiceCode.ERR_BAD_REQUEST,
                e.getFieldError().getDefaultMessage());
    }
}
    @ExceptionHandler
    public JsonResult handleThrowable(Throwable e){
        log.warn("程序运行过程中出现Throwable,将统一处理!");
        log.warn("异常类型:{}",e.getClass());
        log.warn("异常信息:{}",e.getMessage());
        String message = "服务器忙,请稍后再次尝试!";
        e.printStackTrace();
        return JsonResult.fail(ServiceCode.ERR_INTERNAL_SERVER_ERROR,message);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值