在我的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 异常的类型。如果找不到,它将寻找一个映射器 可以处理异常的超类。它会继续下去 进程,直到没有更多的超类来匹配。
有没有人知道,这里有什么?
答案 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)”语句。