获取在ExceptionMapper

时间:2017-02-16 02:00:35

标签: java rest exception-handling jax-rs media-type

我使用JAX-RS ExceptionMapper来捕获应用程序异常并返回自定义输出。问题是在映射器的上下文中,如果用户没有提供Accept标头,我就不知道要返回什么类型的输出(例如HTML与JSON)。目前,代码使用基于UriInfo请求路径的可怕黑客来确定选择的媒体类型。理想情况下,媒体类型应该与抛出异常的方法上的@Produces注释相同,但我还没有找到任何方法在ExceptionMapper中获取该注释。< / p>

这是可能的,还是有其他方法可以返回合理的媒体类型?

其他答案:

This answer建议使用httpHeaders.getMediaType(),它返回传入请求的媒体类型;如果没有请求主体,则返回null,因此对GET请求没有帮助。

以下是基于peeskillet的答案的implementation

1 个答案:

答案 0 :(得分: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;
}