在我的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 回答
通过在我的web.xml中声明如下的提供程序,我能够做到正确:
我也有这个问题 . 看起来好像它在查找子类之前找到了异常的超类 . 这使我无法使用ExceptionMapper for Exception . 有一个特定于应用程序的异常,我必须处理它有子类;我不能为他们单独的异常映射器 . 我有一个超类的异常映射器,然后是一堆“if(e instanceof SubClassA)”语句 .