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

在使用阿里开源工具easyexcel的listner类进行导入的时候,业务代码里会进行校验,如果不符合要求则抛出GlobalException
最后发现并未被异常处理器的handleGlobalException方法捕获到
分析1
当导入逻辑抛出异常时,通过打断点发现会进入springmvc中的ExceptionHandlerExceptionResolver类的doResolveHandlerMethodException方法,而触发异常处理器的逻辑就如下图画红框的方法。
经过层层调用,最后发现该异常匹配到的是RuntimeException,不是GlobalException
所以虽然最初抛出了GlobalException,但是肯定在某个地方进行了包装,最后变成了RuntimeException。
于是继续分析,看是在哪里包装的。
分析2
后来发现easyexcel的listener类在抛出异常时,会包装为如下异常,该异常继承了RuntimeException

结论
没有被期望的异常处理器方法捕获的原因是,GlobalException经过easyexcel处理后,变成了RuntimeException
探讨了在使用easyexcel进行数据导入时,自定义异常GlobalException被转换为RuntimeException的问题。分析了easyexcel的listener类如何处理异常,导致异常处理器未按预期捕获异常。
574

被折叠的 条评论
为什么被折叠?



