3

在我的 JAXRS 应用程序中,我有 2 个ExceptionMapper注册为@Provider

public class MyExceptionMapper implements ExceptionMapper<Exception> {...}

public class MyCustomRuntimeExceptionMapper implements ExceptionMapper<MyCustomRuntimeException> {...}

当我的应用程序抛出一个新MyCustomRuntimeException的,异常被捕获在里面MyExceptionMapper,即使(JAX-RS 规范说)它应该被捕获在 MyCustomRuntimeExceptionMapper 中。

这是 JAXRS 所说的 -

JAX-RS 也支持异常继承。当抛出异常时,JAX-RS 将首先尝试找到该异常类型的 ExceptionMapper。如果找不到,它将寻找一个可以处理异常超类的映射器。它将继续这个过程,直到没有更多的超类可以匹配。

有没有人有线索,这里发生了什么?

4

2 回答 2

1

通过在我的 web.xml 中声明如下提供者,我可以做到这一点:

<context-param>
        <param-name>resteasy.providers</param-name>
        <param-value>CustomExceptionHandler,DefaultExceptionHandler</param-value>
</context-param>
于 2015-04-07T06:40:28.497 回答
0

我也有这个问题。看起来好像它在查找子类之前找到了异常的超类。这使我无法拥有用于异常的 ExceptionMapper。我必须处理一个特定于应用程序的异常,它有子类;我不能为他们提供单独的异常映射器。我有一个超类的异常映射器,然后是一堆“if(e instanceof SubClassA)”语句。

于 2010-07-14T19:06:17.383 回答