Я пишу приложение с использованием Resteasy, которое может возвращать как JSON, так и XML, но по выбору по умолчанию будет XML. Вот мой метод:
@GET
@Path("/content")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public String contentListRequestXml(@Context HttpServletRequest req,
@Context HttpServletResponse response, @Context UriInfo info, @Context HttpHeaders h) {
response.setContentType(MediaType.APPLICATION_XML);
if(isXml)
return generateXML();
else
return generateJSON();
}
У меня проблема в том, что он возвращает два типа контента:
$ curl http://localhost:1234/content -i -H "Accept: application/json,application/xml" -I HTTP/1.1 200 OK
Content-Type: application/xml
Content-Type: application/json
Content-Length: 0
Server: Jetty(6.1.25)
Как мне остановить resteasy от установки второго Content-Type, или есть лучший способ сделать это без необходимости иметь две отдельные функции на одном @Path, но с разными аннотациями @Produces?
Другой вариант - не беспокоиться о response.setContentType и иметь @Produces ({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) и позволить Resteasy справиться с этим, но как мне определить соответствующий медиатип, который будет возвращен? Я могу получить объект HttpHeaders и вызвать для него функцию getAcceptableMediaTypes (), но это означает, что я должен эффективно переосмыслить заголовок Accept, который рестетинг уже сделал для меня. Конечно, должен быть способ получить возвращенный MediaType из resteasy, когда вы указываете несколько параметров @Produces?