9

假设我有 3 个要“捕获”的异常类:

  • 泽西岛的 WebApplicationException
  • MyException 扩展了 RuntimeException
  • 例外

我希望 WebApplicationException 仍由 Jersey 自动映射,MyException 由 MyMapper 映射,并确保任何其他异常也由 MyFallbackMapper 映射。

因此,因为任何异常(我想控制)最终都会扩展异常,是否有任何保证 MyMapper(而不是 MyFallbackMapper)将用于 MyException?

4

1 回答 1

13

JAX-RS 1.1 规范,第 4.4 章:

当资源类或提供者方法抛出异常时,JAX-RS 运行时将尝试将异常映射到合适的 HTTP 响应 - 请参阅第 3.3.4 节。应用程序可以提供异常映射提供程序来自定义此映射。

异常映射提供程序将已检查或运行时异常映射到 Response 实例。异常映射提供程序实现了 ExceptionMapper 接口并使用@Provider 进行注释。当一个资源方法抛出一个有异常映射提供者的异常时,匹配的提供者被用来获取一个响应实例。生成的响应被处理,就好像抛出异常的方法已经返回了响应,请参阅第 3.3.3 节。

When choosing an exception mapping provider to map an exception, an implementation MUST use the provider whose generic type is the nearest superclass of the exception.

于 2012-10-04T10:59:04.650 回答