【问题标题】:ExceptionMapper issue in RESTEasyRESTEasy 中的 ExceptionMapper 问题
【发布时间】:2011-03-09 22:28:27
【问题描述】:

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

有人知道这是怎么回事吗?

【问题讨论】:

  • 你是否实现了 toResponse(MyCustomRuntimeException) 而不是 toResponse(Exception)?

标签: java rest exception-handling resteasy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过在我的 web.xml 中如下声明提供程序,我能够做到这一点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 2011-11-17
      • 2012-09-13
      • 2011-08-06
      • 2017-05-29
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多