2016-06-24 7 views
1

Ich bin neu in Java NIO. Ich verwende es, um HTTP-Get-Anfragen zu machen. Die Anforderungen werden ordnungsgemäß ausgeführt, aber ich kann nicht herausfinden, wie der Inhalt der Antwort abgerufen wird.Wie konsumieren Sie http-Response-Inhalte asynchron mit Apaches HTTP-Async-Client?

Zum Beispiel

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) 

Nun, wie bekomme ich den Inhalt der Antwort? Auf Druck Zukunft, erhalte ich folgende:

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] 

Meine Antwort (im Browser) 903 Zeichen ist, damit ich weiß, das macht es die Anfrage korrekt. Wie aber drucke ich den JSON-Inhalt des Ergebnisses aus?

+0

Welche Bibliothek verwenden Sie? Sie scheinen nicht NIO zu verwenden. –

+0

Ich habe NIO verwendet? –

+0

Sie haben NIO schon einmal benutzt, aber nicht in dem Code, den Sie hier erwähnen. Hinweis: Verwenden Sie irgendwelche Klassen im Paket 'java.nio'? –

Antwort

1

Es gibt ein paar Möglichkeiten für Sie, dies zu nähern.

Eins, rufen Sie get() auf der Future zurückgegeben von execute, blockiert, bis ein Ergebnis bereit ist. Sobald das Ergebnis bereit ist, wird get() schicken Sie das HttpResponse Objekt, das Sie verwenden können, um den Inhalt mit getEntity abzurufen. Die HttpEntity hat eine InputStream. Lesen Sie es, wie Sie es für angebracht halten.

Zwei bieten eine intelligentere HttpAsyncResponseConsumer Implementierung als BasicAsyncResponseConsumer der liest (und schließt) die HttpResponse ‚s HttpEntity und einen Wert erzeugt, der durch den Wert FutureCallback verbraucht werden kann, der als drittes Argument HttpAsyncClient#execute erwartet wird. Diese Lösung wird deinen aktuellen Thread nicht blockieren.

+0

haben Sie, vielen Dank! –

Verwandte Themen