我正在編寫一個應用程序使用Resteasy可以返回JSON和XML,但在一個選擇將默認爲XML。這裏是我的方法:Resteasy內容類型默認值
@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的距離設置第二內容類型,還是有更好的方式來做到這一點,而不必在同一個@Path上有兩個獨立的函數,但有不同的@Produces註釋?
另一種選擇是不打擾response.setContentType並使@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})讓Resteasy處理它,但是如何檢測匹配的mediatype將被返回?我可以得到HttpHeaders對象並調用getAcceptableMediaTypes(),但這意味着我必須有效地重新解釋已經爲我完成的Accept頭。當你提供多個@Produces參數時,肯定有一種方法可以讓返回的MediaType不受干擾?
我可以做的另一件事是不用打擾響應對象,只是有@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) – agentgonzo