我在一个项目中,我为一些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
答案 0 :(得分:1)
关闭响应而不是请求。
这就是示例,教程和文档总是告诉我们的。
当然,您必须将其键入为CloseableHttpResponse而不是HttpResponse。
答案 1 :(得分:1)
使用ByteArrayEntity
。在关闭连接之前,从默认的HttpEntity
收集流,使用流的内容新建一个ByteArrayEntity
,然后使用response.setEntity(yourByteArrayEntity)
。这将使实体持久化。