gpt4 book ai didi

java - 从 Java 中的 Promise[JsonNode] 获取 JsonNode 并返回该值

转载 作者:行者123 更新时间:2023-12-02 14:33:24 28 4
gpt4 key购买 nike

我正在用 Java 编写 Play 2.3.2 应用程序。

在我的应用程序中,我调用了用 Scala 编写的其他模块的方法。

此方法返回一个 Json 响应,我尝试使用 WS 获取该响应。

这是我的方法实现:

public static JsonNode getCorrelationData() {
WSRequestHolder holder = WS.url(ConfigFactory.load().getString("host") + "/recommendation/correlation");
Promise<JsonNode> jsonPromise = holder.get().map(
new Function<WSResponse, JsonNode>() {
public JsonNode apply(WSResponse response) {
if (response.getStatus() != 200) {
Logger.error("Error on get correlation data");
Logger.error("Response status code: " + response.getStatus());
Logger.error("Response status text: " + response.getStatusText());
}

return response.asJson();
}
});



//here I want to obtain the JsonNode inside the jsonPromise object, and return it.
}

但问题是回调返回一个Promise,而我的方法需要返回一个JsonNode。

如何获取Promise中的JsonNode?我找不到解决我的问题的方法。

在 Scala 中,我知道我可以在 Future[T] 上使用 flatMap。

最佳答案

您的方法执行异步操作,因此不应返回 JsonNode而是一个Promise<JsonNode> .

从概念上讲 - 这是有道理的 - 您的方法不会立即获取数据 - 而是分派(dispatch)与所述数据相关的任务,该任务将在未来某个时间完成。您可以通过解开 promise 来访问响应。您可以返回Promise<JsonNode>然后调用.map在调用方站点上打开该值。

您也可以调用.get()在 promise 上,这将迫使数据等待结果(即返回jsonPromise.get(),但这否定了使用 promise 的好处。请注意,这里的get()与持有者上的get()不同,很好,因为它只是返回 promise 。

关于java - 从 Java 中的 Promise[JsonNode] 获取 JsonNode 并返回该值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26523544/

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