关闭连接后,如何使HttpResponse的HttpEntity字段持久化?

时间:2018-07-16 11:56:03

标签: java apache-httpcomponents

我在一个项目中,我为一些REST API编写了很多测试。我有一个专用方法(和其他类似方法)HttpResponse sendRequest(String body, String url)来执行请求,为我节省了一些样板。但是,我的问题是,HttpEntity的{​​{1}}字段在关闭连接后不会保留。

HttpResponse

我可以在关闭连接之前将import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import org.apache.http.impl.client.HttpClient; ... protected HttpClient client; ... protected void testMyHttpAPI(){ String body = makeBody(); String url = "http://localhost/myAPI"; HttpResponse response = sendRequest(body, url); //This successfully returns an HttpResponse assertEquals(response.getStatusLine().getStatusCode(),200); //This checks out HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity); //This line crashes } protected HttpResponse sendRequest(String body, String url){ HttpEntity entity = makeEntity(body); HttpGet get = new HttpGet(url); get.setEntity(entity); HttpResponse response = client.execute(get); get.releaseConnection(); //Here I *close* the connection before I return the HttpResponse. return response; } 转储到字符串 中,然后在HttpEntity或自定义中返回状态代码和HttpEntity制成物体,但这似乎很麻烦。如果我能以某种方式将List<String>保存在本地,那会更好。解决我的问题的最简单方法是什么?


编辑:在接受的答案中应用解决方案后,我的HttpEntity方法是什么样的。

sendRequest

2 个答案:

答案 0 :(得分:1)

关闭响应而不是请求。

这就是示例,教程和文档总是告诉我们的。

当然,您必须将其键入为CloseableHttpResponse而不是HttpResponse。

答案 1 :(得分:1)

使用ByteArrayEntity。在关闭连接之前,从默认的HttpEntity收集流,使用流的内容新建一个ByteArrayEntity,然后使用response.setEntity(yourByteArrayEntity)。这将使实体持久化。