我正在尝试使用Jersey作为RESTful应用程序的客户端。具体来说,我想POST
一些JSON到服务器并获得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);
这会生成预期的HTTP请求,并Content-Type
和Accept
标头设置正确。现在,服务器决定创建所请求的资源,并使用HTTP/1.1 303 See Other
响应重定向(据我所知,这是一个很好的做法)。好消息是泽西岛很高兴地拿起了Location
标题并确实要求它被告知的资源。糟糕的是,它似乎忘记了我只想获得application/json
资源并发送GET
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
服务器愉快地回答(完全合法的HTML)。我使用Wireshark验证了这一点。问题是泽西岛因为无法将其解析成JSONObject
而爆炸。所以我的问题是
我知道我可以通过泽西岛的ClientResponse
课程,看看我是否被重定向,但我认为应该有更好的方法来做这件事。
答案 0 :(得分:2)
在泽西岛邮件列表上使用Pavel short conversation之后,似乎问题在于Java库中的HttpURLConnection
类。通过使用Apache HTTP客户端库binding for Jersey可以很容易地解决这个问题,它可以很好地工作。