从响应中提取JSON作为ResponseEntityProxy{[Content Type:application/JS



我正在尝试将文件上传到url,但收到的不是常规的JSON字符串响应,而是ResponseEntityProxy{[Content-Type: application/json;charset=UTF-8,Chunked: true]}。据我所知,其中有一个JSON字符串作为响应,我需要以某种方式提取它
这是我迄今为止尝试过的代码(这是我将文件上传到url的方法(:

public String uploadDocument() {

String responseMsg="empty";

try(CloseableHttpClient client = HttpClients.createDefault()){

HttpPost httpPost = new HttpPost(SupportUtil.WHATSAPP_PUSH_BASEURL+"/media/upload/");
httpPost.addHeader("Content-type", "application/octet-stream");
httpPost.addHeader("Authorization", "Bearer " + SupportUtil.WHATSAPP_PUSH_KEY);

File file=null;
try {
file = ResourceUtils.getFile("/home/ubuntu/DanFagin.pdf");
} catch (FileNotFoundException e2) {

e2.printStackTrace();
}

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("file",file,ContentType.APPLICATION_OCTET_STREAM,"DanFagin.pdf");

org.apache.http.HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
try (CloseableHttpResponse response = client.execute(httpPost)) {

System.out.println(response.getEntity().toString());
responseMsg= EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println(responseMsg);

} catch (ClientProtocolException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

System.out.println("Response is closed");
System.out.println(responseMsg);

} catch (IOException e1) {

e1.printStackTrace();
}

System.out.println("Client is closed");
return responseMsg;

}

因此,在上面我已经构建了HttpResponse的实体(在代码的前面(,然后尝试使用EntityUtils.toString(entity)方法来获取实体的内容。但当我使用该方法时,我会得到以下错误:

org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected
at org.apache.http.impl.io.ChunkedInputStream.getChunkSize(ChunkedInputStream.java:263)
at org.apache.http.impl.io.ChunkedInputStream.nextChunk(ChunkedInputStream.java:222)
at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:183)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:135)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.Reader.read(Reader.java:140)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:227)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:270)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:290)
at com.wingsure.WSWhatsapp.repository.RestTemplateImpl.uploadDocument(RestTemplateImpl.java:564)
at com.wingsure.WSWhatsapp.service.RestTemplateService.uploadDocument(RestTemplateService.java:49)
at com.wingsure.WSWhatsapp.repository.WebHookRepository.getWebHookDetails(WebHookRepository.java:60)
at com.wingsure.WSWhatsapp.service.ProductService.getWebHookDetails(ProductService.java:84)
at com.wingsure.WSWhatsapp.controller.ProductController.getWebHookDetails(ProductController.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
etc

第564行是EntityUtils.toString()方法所在的位置,如果没有它,我不会收到任何错误。另一方面,我没有找到任何其他方法,在不使用EntityUtils.toString()方法的情况下,我如何获得实体的内容,即JSON字符串
有人可能知道这里会出现什么问题吗?如果有任何帮助和建议,我将不胜感激。。谢谢你。

尽量不要关闭连接

httpclient.close();
response.close();

让框架为您关闭它。我不记得以前关闭过这个。只是我的建议。

我的猜测是,您正在从服务器读取下面3行中的第一行的响应,这3行取自您上面的代码,第二行失败,因为实体读取器在第一行读取时关闭了连接:

System.out.println(response.getEntity().toString());
responseMsg= EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println(responseMsg);

相关内容

最新更新