RESTEasy中的ExceptionMapper问题

时间:2010-06-30 02:42:07

标签: java rest exception-handling resteasy

在我的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   异常的类型。如果找不到,它将寻找一个映射器   可以处理异常的超类。它会继续下去   进程,直到没有更多的超类来匹配。

有没有人知道,这里有什么?

2 个答案:

答案 0 :(得分:1)

我能够通过在我的web.xml中声明提供者来实现正确的目标:

<context-param>
        <param-name>resteasy.providers</param-name>
        <param-value>CustomExceptionHandler,DefaultExceptionHandler</param-value>
</context-param>

答案 1 :(得分:0)

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