Если вы нарушите это вниз, вы найдете следующее:
CompletionStage<WSResponse> eventualResponse = ws.url("http://url.com").get()
Обратите внимание на имя, которое я дал переменную: eventualResponse
. То, что получено от .get()
, не является ответом от HTTP-вызова, но обещает, что в конечном итоге будет один.
Принимая следующий шаг, мы имеем это:
CompletionStage<JsonNode> eventualJson = eventualResponse.thenApply(response -> response.asJson());
Опять же, это обещание что когда eventualResponse
является полной и response
(параметр лямбда) доступен, метод asJson
будет вызван на response
, Это также происходит асинхронно.
Это означает, что то, что вы проходите до System.out.println
, не является JSON, а скорее обещанием JSON. Соответственно, вы получаете подпись toString
CompletableFuture
(которая представляет собой реализацию CompletionStage
).
Для обработки JSON, держать цепь собирается:
ws.url("http://url.com")
.get()
.thenApply(response -> response.asJson())
.thenApply(json -> do something with the JSON)
. and so on
NB Существует небольшая разница между обещанием и будущее - в этом ответе я использовал термины взаимозаменяемыми, но это стоит зная разницу. Взгляните на https://softwareengineering.stackexchange.com/a/207153 для краткого взятия этого.
Спасибо! Для ответа и ссылки, эта статья в википедии действительно дает галочку. – Adakbar