Jersey客户端在重定向时忘记Accept标头



我正在尝试使用Jersey作为RESTful应用程序的客户端。具体来说,我想将一些JSON POST发送到服务器,然后取回JSON,所以我的代码看起来是这样的:

final JSONObject config = new JSONObject();
clientConfig.put("fooParam", 60 * 5); /* 5 min timeout */
final JSONObject newClient = client.resource(/* URL */).
                          type(MediaType.APPLICATION_JSON).
                          accept(MediaType.APPLICATION_JSON).
                          post(JSONObject.class, config);

这生成具有适当设置的CCD_ 2和CCD_。现在,服务器决定创建请求的资源,使用HTTP/1.1 303 See Other响应将重定向到那里(据我所知,这是一种很好的做法)。好消息是Jersey很高兴地获得了Location头,并确实请求了它被告知的资源。坏消息是它似乎忘记了我只想获得application/json资源,并发送了一个带有的GET

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

服务器愉快地回答(使用完全合法的HTML)。我用Wireshark验证了这一点。问题是Jersey对此大发雷霆,因为它无法将其解析为JSONObject。所以我的问题是

  • 泽西岛的这种行为是正确的还是错误的
  • 有什么聪明的方法吗

我知道我可能会浏览Jersey的ClientResponse课程,看看我自己是否被重定向了,但我认为应该有更好的方法来做到这一点。

在Jersey邮件列表上与Pavel进行了简短的交谈后,问题似乎出在Java库中的HttpURLConnection类中。通过使用适用于Jersey的ApacheHTTPClient库绑定可以很容易地解决这一问题,该绑定工作得很好。

相关内容

  • 没有找到相关文章

最新更新