mvc异常处理器未捕获到自定义异常

探讨了在使用easyexcel进行数据导入时,自定义异常GlobalException被转换为RuntimeException的问题。分析了easyexcel的listener类如何处理异常,导致异常处理器未按预期捕获异常。

问题场景

项目自定义了一个异常, 并在异常处理器进行处理

在这里插入图片描述
在使用阿里开源工具easyexcel的listner类进行导入的时候,业务代码里会进行校验,如果不符合要求则抛出GlobalException在这里插入图片描述
最后发现并未被异常处理器的handleGlobalException方法捕获到

分析1

当导入逻辑抛出异常时,通过打断点发现会进入springmvc中的ExceptionHandlerExceptionResolver类的doResolveHandlerMethodException方法,而触发异常处理器的逻辑就如下图画红框的方法。在这里插入图片描述
经过层层调用,最后发现该异常匹配到的是RuntimeException,不是GlobalException在这里插入图片描述
所以虽然最初抛出了GlobalException,但是肯定在某个地方进行了包装,最后变成了RuntimeException
于是继续分析,看是在哪里包装的。

分析2

后来发现easyexcel的listener类在抛出异常时,会包装为如下异常,该异常继承了RuntimeException

在这里插入图片描述

结论

没有被期望的异常处理器方法捕获的原因是,GlobalException经过easyexcel处理后,变成了RuntimeException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值