使用jersey客户端将JSON响应读取为字符串

时间:2013-10-24 05:08:44

标签: json string jersey response

我正在使用jersey客户端将文件发布到REST URI,该URI返回响应为json。 我的要求是将响应原样(json)读成字符串。

以下是将数据发布到Web服务的代码段。

final ClientResponse clientResp = resource.type(
            MediaType.MULTIPART_FORM_DATA_TYPE).
            accept(MediaType.APPLICATION_JSON).
            post(ClientResponse.class, inputData);
     System.out.println("Response from news Rest Resource : " + clientResp.getEntity(String.class)); // This doesnt work.Displays nothing.

clientResp.getLength()有281个字节,这是响应的大小,但clientResp.getEntity(String.class)不返回任何内容。

任何想法在这里可能是不正确的?

4 个答案:

答案 0 :(得分:16)

我能够找到问题的解决方案。只需在getEntity(String.class)之前调用bufferEntity方法。这将以字符串形式返回响应。

   clientResp.bufferEntity();
   String x = clientResp.getEntity(String.class);

答案 1 :(得分:7)

虽然上面的答案是正确的,但使用Jersey API v2.7与db.userRating.aggregate([ { "$group": { "_id": { "$month": "$createdDate" }, "follow": { "$sum": { "$cond": [ { "$eq": [ "$type", "follow" ] }, 1, 0 ] } }, "unfollow": { "$sum": { "$cond": [ { "$eq": [ "$type", "unfollow" ] }, 1, 0 ] } } } } ]); 略有不同:

Response

答案 2 :(得分:0)

如果您仍然遇到此问题,可以考虑使用rest-assured

答案 3 :(得分:0)

就我而言,我使用的是Jersey 1.19,而Genson却以某种方式进入了我的课堂路径?因此,接受的答案将引发com.owlike.genson.stream.JsonStreamException: Readen value can not be converted to String

我的解决方案是直接从响应流中读取:

private String responseString(com.sun.jersey.api.client.ClientResponse response) {
        InputStream stream = response.getEntityInputStream();
        StringBuilder textBuilder = new StringBuilder();
        try (Reader reader = new BufferedReader(new InputStreamReader(stream, Charset.forName(StandardCharsets.UTF_8.name())))) {
            int c = 0;
            while ((c = reader.read()) != -1) {
                textBuilder.append((char) c);
            }
            return textBuilder.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }