2017-02-16 59 views
0

我使用JAX-RSExceptionMapper來捕獲應用程序異常並返回自定義輸出。問題是,在映射器的上下文中,如果用戶提供的頭沒有Accept頭,我不知道要返回哪種類型的輸出(例如HTML和JSON)。目前,代碼使用基於UriInfo請求路徑的可怕黑客來確定選擇哪種媒體類型。理想情況下,媒體類型應與拋出異常的方法上的@Produces註釋相同,但我無法找到任何方式在ExceptionMapper中獲取該註釋。獲取@Produces在異常映射中拋出Exception的方法的註解

這是可能的,還是有一些其他的方式來返回一個合理的媒體類型?

其他答案:

This answer建議使用httpHeaders.getMediaType(),如果沒有請求主體,因此不利於對GET請求返回傳入請求的媒體類型或空。

這是implementation根據peeskillet的答案在下面。

+0

在不解釋問題的原因的情況下下調這個問題是非常無益的。我已經多次閱讀這個問題來尋找問題,但對我來說似乎很好。 – elhefe

回答

1

您可以將ResourceInfo注入到映射器中。在那裏你可以得到被調用的Method和類。你可以用一些反射來檢查註釋。

Method method = resourceInfo.getResourceMethod(); 
Class cls = resourceInfo.getResourceClass(); 
String[] mediaTypes; 
Produces produces = method.getAnnotation(Produces.class); 
if (produces == null) { 
    produces = cls.getAnnotation(Produces.class); 
} 
if (produces != null) { 
    mediaTypes = produces.value(); 
} else { 
    mediaType = defaultMediaTypes; 
} 
+0

謝謝,我根據你對OQ的回答添加了一個實現。 – elhefe

相關問題