Spring异常处理@ControllerAdvice+@ExceptionHandler注解的使用

1.注解介绍

前言:
对于与数据库相关的 Spring MVC 项目,我们通常会把事务配置在Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事务管理器就会进行回滚。
如此一来,我们的 Controller 层就不得不进行 try-catch Service 层的异常,否则会返回一些不友好的错误信息到客户端。但是,Controller 层每个方法体都写一些模板化的 try-catch 的代码,很难看也难维护,特别是还需要对 Service 层的不同异常进行不同处理的时候。
(1)在Spring里,我们可以使用@ControllerAdvice来声明一些全局性的东西,最常见的是结合@ExceptionHandler注解用于全局异常的处理。
(2)@ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;
注意:@ControllerAdvice+@ExceptionHandler只能处理 Controller 层未捕获(往外抛)的异常,对于 Interceptor(拦截器)层的异常,Spring 框架层的异常,就无能为力了。

2.基本使用方法

(1)@ControllerAdvice 注解定义全局异常处理类,确保此GlobalExceptionHandler类能被扫描到并装载进 Spring 容器中
(2)Spring的@ExceptionHandler可以用来统一处理方法抛出的异常,当我们使用这个@ExceptionHandler注解时,

①我们需要定义一个异常的处理方法,
②@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常

实例代码如下

//@ControllerAdvice:异常集中处理,对Controller层进行拦截
//写个@ControllerAdvice就可以使用了,加上annotations作用:拦截加了RestController,Controller注解的类
@ControllerAdvice(annotations = {RestController.class, Controller.class})
public class GlobalExceptionHandler {
    //异常处理方法
  @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex) {
     System.out.println("抛异常了:" + ex);
  }     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值