私はResteasyを使ってJSONとXMLの両方を返すアプリを書いていますが、選択肢はXMLになります。ここに私の方法があります:Resteasy Content-Type defaults
@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();
}
私が持っている問題は、2つのコンテンツタイプを返しているということです。
$ 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)
どのように私は2番目のContent-Typeを設定することからRESTEasyのを停止、または存在しません同じ@Pathではなく、異なる@Producesアノテーションを持つ2つの別々の関数を持たなくても、これを行うより良い方法はありますか?
もう1つの選択肢は、response.setContentTypeを気にせず、@Produces({MediaType.APPLICATION_XML、MediaType.APPLICATION_JSON})を持ち、Resteasyが処理するようにすることですが、返される一致するメディアタイプを検出するにはどうすればよいですか?私はHttpHeadersオブジェクトを取得してgetAcceptableMediaTypes()を呼び出すことができますが、これは私がresteasyがすでに行っているAcceptヘッダーを効果的に再解釈しなければならないことを意味します。確かに、複数の@Producesパラメータを提供するときに、返されたMediaTypeを再取得する方法が必要ですか?
私ができることは、レスポンスオブジェクトを気にせず、@Produces(MediaType.APPLICATION_XML、MediaType.APPLICATION_JSON)を持っていることです。 – agentgonzo