Java 使用ApacheHttpClient';时是否可以同时获取状态代码和正文内容;什么是正面?

Java 使用ApacheHttpClient';时是否可以同时获取状态代码和正文内容;什么是正面?,java,apache-httpclient-4.x,fluent,Java,Apache Httpclient 4.x,Fluent,我在一些示例代码中使用,以供开发人员扩展。他们非常喜欢fluent facade,它可以直接调用: this.body = Request.Get(uri.build()).execute().returnContent().asString(); 此外,我还可以通过调用以下命令获取状态代码: this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode()

我在一些示例代码中使用,以供开发人员扩展。他们非常喜欢fluent facade,它可以直接调用:

this.body = Request.Get(uri.build()).execute().returnContent().asString();
此外,我还可以通过调用以下命令获取状态代码:

this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
不幸的是,在一些情况下,我除了需要主体之外还需要状态代码。基于,我看到我可以让他们学习HttpClient对象-

HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();

但是,这意味着初始化HttpClient对象,并似乎拒绝Fluent接口和Request.Get(或Post)语法。有没有一种方法可以在不丢失流畅语法和不进行两次离散调用的情况下获取状态代码和正文?

是的,尽管您必须自己处理响应对象。以下是我过去如何做到这一点的一个例子:

org.apache.http.HttpResponse response = Request.Get(url)
    .connectTimeout(CONNECTION_TIMEOUT_MILLIS)
    .socketTimeout(SOCKET_TIMEOUT_MILLIS)
    .execute()
    .returnResponse();

int status = response.getStatusLine().getStatusCode();
byte[] serializedObject = EntityUtils.toByteArray(response.getEntity());

有几种方法可以使用EntityUtils检索正文内容。在本例中,我从缓存中检索序列化对象,但您明白了。我真的不相信这与Fluent API有什么不同,但我想这是一个意见问题。问题是使用Fluent returnXXX方法时,响应被完全消耗和关闭,因此您必须从响应本身获取所需的内容。

只是一个挑剔:使用HC Fluent时,无需调用EntityUtils#consume。谢谢!这就是我需要的。谢谢@oleg的评论。正在更新代码。HttpResponse的完整类名是什么?(即,我需要导入什么才能使其工作?)org.apache.http.HttpResponse。你应该经常检查API文档:我已经将其添加到项目的jira板中