Java 获取未声明的HrowableException而不是我自己的异常
我有以下代码Java 获取未声明的HrowableException而不是我自己的异常,java,aop,aspect,Java,Aop,Aspect,我有以下代码 public Object handlePermission(ProceedingJoinPoint joinPoint, RequirePermission permission) throws AccessException, Throwable { System.out.println("Permission = " + permission.value()); if (user.hasPermission(permission.value())) {
public Object handlePermission(ProceedingJoinPoint joinPoint, RequirePermission permission) throws AccessException, Throwable {
System.out.println("Permission = " + permission.value());
if (user.hasPermission(permission.value())) {
System.out.println("Permission granted ");
return joinPoint.proceed();
} else {
System.out.println("No Permission");
throw new AccessException("Current user does not have required permission");
}
}
当我使用一个没有权限的用户时,我会得到
java.lang.reflect.UndeclaredThrowableException
,而不是AccessException
AccessException
是一个选中的异常,但它是从没有在其throws
子句中声明它的方法中抛出的(实际上是从拦截该方法的方面)。这在Java中是一种异常情况,因此您的异常被包装为未声明的HrowableException
,这是未选中的
要按原样获取异常,您可以在方面拦截的方法的
throws
子句中声明它,或者使用另一个未检查的异常(即RuntimeException
的子类)而不是AccessException
+1。我只想补充一点,在这些情况下,未声明的hrowableexception
包装原始异常getCause()
将返回AccessException
。我在拦截的方法中声明了AccessException。将AccessException更改为extend RuntimeException有效。如果您是被捕获的代码的作者,则可以阅读@EdgeCaseBerg和其他任何人,我认为我被代理问题所困扰,但随后使用了抛出新的ValidationException('delete.failure',s.errors')
-然后返回正确的消息,而不是未声明的HrowableException
,这是RuntimeException
返回的消息在我的案例中,在方法中声明抛出ClassNotFoundException
无效,但将异常包装在RuntimeException
中确实有帮助(抛出新的RuntimeException(e)
)。对于某些上下文:我在gradle@TaskAction
注释的方法中使用它