记录-代理类异常,方法被代理后发生异常无法捕获

当方法通过反射被代理类调用时,抛出的异常会被包装成InvocationTargetException。这种情况下,全局异常处理器可能无法捕获自定义异常。解决方法是在catch块中检查异常类型,如果它是反射异常,则通过getTargetException获取实际异常,从而手动返回错误信息。
摘要由CSDN通过智能技术生成

在stackoverflow中有这样一句话: The reflection layer wraps any exception in an InvocationTargetException, which lets you tell the difference between an exception actually caused by a failure in the reflection call (maybe your argument list wasn’t valid, for example) and a failure within the method called
翻译一下就是: 反射层将所有的异常都包装在一个InvocationTargetException 中,能使你区分异常的实际上是反射层的引起的一个调用失败(例如参数列表无效)和调用方法内部的错误

问题: 方法被代理类调用后,手动Throw的异常无法被全局异常处理器捕获
在这里插入图片描述

此为反射调用方法 如果此方法报错
在这里插入图片描述

反射层会将所有异常封装为InvocationTargetException 如果在catch中不作操作 全局异常处理器无法捕获自定义异常
在这里插入图片描述
在catch中 加判断 先判断异常是否属于反射异常,如果是,强转后调用getTargetException方法,即可获得被反射方法实际的异常,然后手动return 自定义的错误信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值