我是Java NIO的新手。我正在使用它来发出HTTP Get请求。请求正确执行,但我无法弄清楚如何获取响应的内容。
例如,
CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();
httpClient.start();
url = buildUrl(); //builds the url for the GET request
BasicAsyncResponseConsumer consumer = new BasicAsyncResponseConsumer();
Future<HttpResponse> future = httpClient.execute(HttpAsyncMethods.createGet(url), consumer, null)
现在我如何获得回复的内容?在打印未来时,我得到以下内容:
HTTP/1.1 200 OK [Content-Type: application/json, Date: Fri, 24 Jun 2016 20:21:47 GMT, Content-Length: 903, Connection: keep-alive] [Content-Length: 903,Chunked: false]
我的回复(在浏览器上)是903个字符,所以我知道它正确地提出了请求。但是,如何打印出结果的json内容?
答案 0 :(得分:1)
有几种方法可以解决这个问题。
一,在get()
返回的Future
上致电execute
,阻止直到结果准备就绪。结果准备就绪后,get()
将返回HttpResponse
对象,您可以使用该对象检索getEntity
内容。 HttpEntity
有一个InputStream
。如果您认为合适,请阅读它。
两个,提供比HttpAsyncResponseConsumer
更智能的BasicAsyncResponseConsumer
实现,它会读取(并关闭)HttpResponse
&#39; HttpEntity
并生成可以消费的值通过FutureCallback
值预期作为HttpAsyncClient#execute
的第三个参数。此解决方案不会阻止您当前的线程。