Aff*_*eek 8 java fluent apache-httpclient-4.x
我在Java中使用Apache的HttpClient Fluent Facade中的一些示例代码供开发人员扩展.他们真的很喜欢流利的外观,能够打电话:
this.body = Request.Get(uri.build()).execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)
另外,我可以通过调用获取状态代码:
this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
不幸的是,有几个实例我需要除了正文之外的状态代码.根据这个问题,我看到我可以让他们学习HttpClient对象 -
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
但是,这意味着初始化HttpClient对象并且似乎拒绝了Fluent接口和Request.Get(或Post)语法.有没有办法同时获取状态代码和正文而不会丢失Fluent语法并且不进行两次离散调用?
jgi*_*ter 13
是的,虽然你必须自己处理Response对象.这是我过去如何做到这一点的一个例子:
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());
Run Code Online (Sandbox Code Playgroud)
有几种方法可以使用EntityUtils检索正文内容.在这种情况下,我从缓存中检索序列化对象,但你明白了.我真的不相信这与Fluent API有所不同,但我想这是一个意见问题.问题是使用Fluent returnXXX方法,响应被完全消耗并关闭,因此您必须从响应本身获得所需的内容.
| 归档时间: |
|
| 查看次数: |
2966 次 |
| 最近记录: |