gpt4 book ai didi

java - 播放 2.5 : Process respones from API

转载 作者:行者123 更新时间:2023-11-30 08:36:50 24 4
gpt4 key购买 nike

我尝试调用一些 REST API 并处理 JSON 响应,阅读官方 Play 文档,我试试这个:

CompletionStage<JsonNode> token = ws.url("http://url.com")
.get()
.thenApply(response -> response.asJson());

但是当我使用 System.out.println(token) 打印 token 时,

我收到此消息 java.util.concurrent.CompletableFuture@4a5ece42[Not completed] 而不是 JSON。

我仍在努力理解 Future 和 Promise 的概念,我是否遗漏了什么?

提前致谢

最佳答案

如果你分解它,你会发现以下内容:

CompletionStage<WSResponse> eventualResponse = ws.url("http://url.com").get()

注意我给变量的名称:eventualResponse。从 .get() 获得的不是来自 HTTP 调用的回复,而是一个 promise 最终会有一个。

下一步,我们有这个:

CompletionStage<JsonNode> eventualJson = eventualResponse.thenApply(response -> response.asJson());

同样,这是一个 promise ,当eventualResponse 完成并且response(lambda 参数)可用时,asJson 方法将在 response 时被调用。这也是异步发生的。

这意味着您传递给 System.out.println 的不是 JSON,而是 JSON 的 promise 。因此,您将获得 CompletableFuturetoString 签名(它是 CompletionStage 的实现)。

要处理 JSON,请保持链继续运行:

ws.url("http://url.com")
.get()
.thenApply(response -> response.asJson())
.thenApply(json -> do something with the JSON)
. and so on

注意 promise 和 future 之间存在细微差别 - 在本回答中我交替使用了这两个术语,但值得了解其中的差别。看看https://softwareengineering.stackexchange.com/a/207153对此进行简要介绍。

关于java - 播放 2.5 : Process respones from API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com