2012-10-04 115 views
9

比方說,我有我想 「釣」 3異常類:新澤西ExceptionMapper和繼承

  • 新澤西州的WebApplicationException
  • MyException延伸的RuntimeException
  • 異常

我想WebApplicationException仍然由Jersey自動映射,MyException由MyMapper映射,並確保任何其他異常也由MyFallbackMapper映射。

因此,因爲任何異常(我想控制)最終擴展異常,是否有任何保證MyMapper(而不是MyFallbackMapper)將用於MyException?

回答

13

JAX-RS 1.1規範,第4.4章:

當資源類或提供商方法拋出異常時,JAX-RS運行時將嘗試異常映射到合適的HTTP響應 - 見3.3.4 。應用程序可以提供異常映射提供程序來自定義此映射。

異常映射提供程序將檢查或運行時異常映射到Response實例。一個例外映射提供程序實現了ExceptionMapper接口,並使用@Provider進行註釋。當資源方法拋出異常映射提供程序的異常時,匹配提供程序用於獲取Response實例。處理結果響應就好像拋出異常的方法返回響應一樣,參見3.3.3節。

當選擇異常映射提供程序來映射異常時,實現必須使用其泛型類型是異常最接近的超類的提供程序。

+0

謝謝。不知道它是jax-rs的一部分! –

+0

這是在規範是好的,但澤西不符合。我已經看到它處理(使用OP的例子),使用'MyFallbackMapper'處理'MyException'。 – Jorn

+0

在這種情況下,請在https://java.net/jira/browse/JERSEY/上提交錯誤,分享您的測試用例並將鏈接附加到您的測試中。謝謝! –