自定义异常的抛出问题
今天,在整理代码时遇到了一个问题;
项目中使用了EasyExcel的导入功能,在设计时定义了枚举转换,正常导入没有问题;但是当导入的excel文本有问题时,
会抛出转换异常的运行时异常;
我在 onException中捕获了运行时异常,并准备抛出自定义的异常给前台;
但是 抛出过程中发现 抛出的仍然是运行时异常,导致抛出的错误信息。不能反馈给用户。我在debug追踪代码后发现
boolean excexceptionType =exception instanceof BizException 异常返回的结果为false,即异常不是抛出的自定义类型;
经过查阅资料后发现,用e.getCause()可以获取到对应的自定义抛出的异常;
既然遇到了问题,调研一下使用场景发现这种情况常常应用于反射场景。
在反射中调用try{}catch(Exception e){e.getMesssage}发现并不能捕获到
对应的异常信息,而e.getCause().getMessage 则可以获取到需要的信息;
解释:java有一个异常链,一个异常可能是由于另一个异常引起的。
采用反射机制,我们捕捉到的异常是java.lang.reflect.InvocationTargetException,
这个异常的message为null;
这个异常是我们的方法所抛出异常引起的。
故要获取方法真正的异常,应该用e.getCause;

浙公网安备 33010602011771号