Wenn Sie diese brechen, werden Sie folgendes finden:
CompletionStage<WSResponse> eventualResponse = ws.url("http://url.com").get()
Beachten Sie den Namen gab ich die Variable: eventualResponse
. Was von .get()
erhalten wird, ist keine Antwort vom HTTP-Aufruf, sondern ein Versprechen, dass es irgendwann eins geben wird.
Der nächste Schritt, haben wir diese:
CompletionStage<JsonNode> eventualJson = eventualResponse.thenApply(response -> response.asJson());
Wieder ist es ein Versprechen, dass, wenn eventualResponse
abgeschlossen ist und response
(der Lambda-Parameter) zur Verfügung steht, die asJson
Methode auf response
aufgerufen wird . Dies geschieht auch asynchron.
Das bedeutet, dass das, was Sie an System.out.println
übergeben, nicht das JSON, sondern das Versprechen von JSON ist. Dementsprechend erhalten Sie die toString
Signatur eines CompletableFuture
(die eine Implementierung von CompletionStage
ist).
die JSON zu bearbeiten, um die Kette weitermachen:
ws.url("http://url.com")
.get()
.thenApply(response -> response.asJson())
.thenApply(json -> do something with the JSON)
. and so on
NB Es gibt einen kleinen Unterschied zwischen Versprechen und Zukunft - in dieser Antwort, die ich die Begriffe synonym verwendet haben, aber es lohnt sich den Unterschied kennen. Werfen Sie einen Blick auf https://softwareengineering.stackexchange.com/a/207153 für eine prägnante Aufnahme.
Danke! Für die Antwort und die Referenz gibt dieser Wikipedia-Artikel wirklich die Zecke. – Adakbar