HTTPResponse作为Java中的JSON

HTTPResponse作为Java中的JSON,java,json,jakarta-ee,httpresponse,Java,Json,Jakarta Ee,Httpresponse,我试图从HTTP响应获取JSONObject try { GetMethod postMethod = new GetMethod(); postMethod.setURI(new URI(url, true)); postMethod.setRequestHeader("Accept", "application/json"); httpClient.executeMethod(postMethod);

我试图从HTTP响应获取JSONObject

try
    {   
        GetMethod postMethod = new GetMethod();
        postMethod.setURI(new URI(url, true));
        postMethod.setRequestHeader("Accept", "application/json");
        httpClient.executeMethod(postMethod);
        String resp=postMethod.getResponseBodyAsString();
        org.json.JSONTokener tokener = new org.json.JSONTokener(resp);
        finalResult = new org.json.JSONArray(tokener);

        return finalResult;
    }
但我也收到了运行时警告

转到大或未知大小的缓冲区响应体。建议改用
getResponseBodyAsStream


我应该按照JVM的建议以流的形式获得响应吗?如果是这样,我如何从中解析JSON

您的服务器是否已设置为通知客户端其响应有多大?如果没有,则服务器正在流式传输数据,从技术上讲,不可能知道处理响应需要多少缓冲区空间,从而发出警告,指出正在发生潜在危险。

您可以使用Java EE 7轻松生成JSonObject。示例代码

    JsonReader reader = Json.createReader(new URI(url, true));
    JsonObject jsonObject=reader.readObject();
有关详细信息,请转到链接。

如果要从服务器(tomcat服务器)发送
JSONObject

对于服务器端-

创建
jsonobjects
-

我调用了
toJson()
来创建
jsonobjects
这就是实现-

final JSONObject arr = new JSONObject();

for (int i = 0; i < contactStatus.size(); i++) {
    ContactStatus contactObject = contactStatus.get(i);

    try {
        arr.put(String.valueOf(i), toJson(value1, value2,, value3));
    } catch (JSONException e) {

     catch block e.printStackTrace();
    }
}

//Here we serialize the stream to a String.
final String output = arr.toString();
response.setContentLength(output.length());
out.print(output);//out is object of servlet output stream.

public static Object toJsonForContact(String value1, boolean value2, double value3) throws JSONException {

    JSONObject contactObject = new JSONObject();
    contactObject.put("id", id);
    contactObject.put("status", value1);
    contactObject.put("distance", value2);
    contactObject.put("relation", value3);
    return contactObject;
}

只需将内容读到
字节[]
,将
字节[]
转换成
字符串(取决于编码),并解析
字符串,因为JSONI希望Java的几十个JSON包中的一个可以直接从流中读取。
while ((ReadResponses = in.readLine()) != null) {
        Constants.Response_From_server = ReadResponses;

        if (Constants.Response_From_server.startsWith("{")) {
            ListOfContactStatus = new ArrayList<ContactStatus>();
            ContactStatus contactStatusObject;

            try {
                JSONObject json = new JSONObject(Constants.Response_From_server);

                for (int i = 0; i < json.length(); i++) {
                    contactStatusObject = new ContactStatus();

                    JSONObject json1 = json.getJSONObject(String.valueOf(i));
                    System.out.println("" + json1.getString("id"));
                    System.out.println("" + json1.getBoolean("status"));
                    System.out.println("" + json1.getDouble("distance"));

                    contactStatusObject.setId(json1.getString("id"));
                    contactStatusObject.setStatus(json1.getBoolean("status"));
                    contactStatusObject.setDistance((float) json1.getDouble("distance"));
                    ListOfContactStatus.add(contactStatusObject);
                    System.out.println("HTTPTransport:sendMessage  Size of ListOfContactStatus" + ListOfContactStatus.size());
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}