SpringBoot项目统一异常处理方案(三)

本文介绍了如何使用SpringAOP实现SpringBoot项目的统一异常处理。通过创建切面类,定义切点表达式,捕获Controller层的方法执行异常,然后根据异常类型返回不同的响应。此外,这种方式还方便进行接口执行时间记录以及其他如参数校验、缓存控制、权限验证、事务管理等功能的实现。
利用SpringAOP实现统一异常处理

SpringBoot项目统一异常处理方案(一)
SpringBoot项目统一异常处理方案(二)

第三种:SpringAOP统一拦截

通过AOP(面向切面编程)的方式,统一对 Controller 层的所有类的方法进行代理,所有被代理的方法都会经过SysControllerAspect的处理,这样即做到了异常的统一捕获处理。如下代码示例:

@Component
@Aspect
public class SysControllerAspect {

    private static final Logger LOG = LoggerFactory.getLogger(SysAspect.class);

    @Pointcut("execution(* com.bin.controller..*(..))")
    public void pointCut(){}

    @Around("pointCut()")
    public Object doExceptionAdvice(ProceedingJoinPoint point) throws Throwable {
        Object proceed;
        try {
            proceed = point.proceed();
        } catch (Exception e) {
            LOG.error("参数信息:" + JSON.toJSONString(point.getArgs()), e);
            if (e instanceof BusinessException) {
                return Playload.error(RespCode.BUSINESS_EX.getCode(), e.getMessage());
            } else {
                return Playload.error(RespCode.OTHER_EX.getCode(), e.getMessage());
            }
        }
        return proceed;
    }
}

总结步骤如下

1、创建SysControllerAspect,加上@Aspect注解标识为切面类,并将它注册到IOC容器中管理

2、定义一个pointCut(切点),定义切点表达式@Pointcut("execution(* com.bin.controller..*(..))"),这里的含义是:匹配到 com.bin.controller 包和子包下的所有方法

3、定义一个 doExceptionAdvice(增强方法),并声明为@Around("pointCut()"),作用是将pointCut()匹配到的所有方法进行环绕增强 (环绕增强即是在目标方法执行前和执行后要做的操作),这里做的操作即是对目标方法进行异常捕获

4、最终根据异常类型去匹配到你定义的业务异常BusinessException或者其他异常,进行不同结果的返回。

注:这种通过AOP的方式同时还很方便的进行接口的执行时间记录,SpringAOP还可以做其他很多事情比如 参数校验缓存控制权限验证事务管理 等等…

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值