2017-02-16 63 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

相关问题