java—保留httpentity而不使用流

xriantvc  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(370)

我正在使用org.apache.http.client.httpclient,并尝试在不使用底层流的情况下访问请求httpentity的有效负载。我试过用

EntityUtils.toString(someEntity);

但这会消耗水流。我只想保留在http请求中发送给string对象的有效负载。
示例代码:

String uri = "someURI";
HttpPut updateRequest = new HttpPut(uri);         
updateRequest.setEntity(myHttpEntity);

任何暗示都很感激。

jtoj6r0c

jtoj6r0c1#

httpentity必须是 repeatable 可重复使用。方法 isRepeatable() 显示是否是这种情况。
两个实体是可重复的:
字符串实体
bytearrayentity公司
这意味着您必须将其中一个添加到原始请求中,以便继续使用其内容。

public void doExample() {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPut httpPut = new HttpPut("some_url");
    httpPut.setHeader(CONTENT_TYPE, ContentType.APPLICATION_JSON.toString());
    StringEntity jsonEntityOrso = new StringEntity("{ \"hello\": \"some message\" }");
    httpPut.setEntity(jsonEntityOrso);
    StringEntity reusableEntity = (StringEntity) httpPut.getEntity();
    String hello = readInputStream(reusableEntity.getContent());
    String hello2 = readInputStream(reusableEntity.getContent());
    boolean verify = hello.equals(hello2); // returns true
}

private String readInputStream(InputStream stream) {
    return new BufferedReader(
        new InputStreamReader(stream, StandardCharsets.UTF_8))
        .lines()
        .collect(Collectors.joining("\n"));
}

相关问题