获取 UndeclaredThrowableException 而不是我自己的异常

发布于 2024-10-28 08:17:38 字数 637 浏览 6 评论 0原文

我有以下代码

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

I have the following code

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");
    }

}

When I use a user that does not have permissions, I get java.lang.reflect.UndeclaredThrowableException instead of AccessException.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷乱花海 2024-11-04 08:17:38

AccessException 是一个已检查异常,但它是从未在其 throws 子句中声明它的方法中抛出的(实际上 - 从拦截该方法的方面来看)。这是 Java 中的异常情况,因此您的异常被 UndeclaredThrowableException 包裹起来,这是未经检查的。

要按原样获取异常,您可以在方面拦截的方法的 throws 子句中声明它,或者使用另一个未经检查的异常(即 RuntimeException 的子类) ) 而不是 AccessException

AccessException is a checked exception, but it was thrown from the method that doesn't declare it in its throws clause (actually - from the aspect intercepting that method). It's an abnormal condition in Java, so your exception is wrapped with UndeclaredThrowableException, which is unchecked.

To get your exception as is, you can either declare it in the throws clause of the method being intercepted by your aspect, or use another unchecked exception (i.e. a subclass of RuntimeException) instead of AccessException.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文