gpt4 book ai didi

java - 如何以非阻塞方式从 WebClient bodyToMono 或 toEntity 获取对象

转载 作者:行者123 更新时间:2023-12-03 08:10:51 35 4
gpt4 key购买 nike

我是 Spring WebClient 的新手。我有以下方法使用 WebClient 调用端点,并且我需要从此方法返回 ResponseEntity。我知道我可以调用 block(),但是我是否可以以非阻塞方式做到这一点?即使我可以返回 Mono,调用方法仍然需要解开它并获取 ResponseEntity,调用方法如何执行,调用 block

public ResponseEntity getData() {

Mono<ResponseEntity<String>> entityMono = webClient.post()
.uri(url)
.body(BodyInserters.fromValue(aString))
.retrieve()
.toEntity(String.class);

// what do I need to do here so that I can return ResponseEntity non-blocking

}

最佳答案

如果你想返回 ResponseEntity没有其他办法,你需要block .

这样想,你发出一个请求,你需要等待响应,直到我们可以构造一个 ResponseEntity因为我们需要返回的数据,直到我们可以构建它。

如果您正在编写一个完全非阻塞的应用程序,这很糟糕,因为在所有事情中间您基本上都在大喊“停止”,并且整个应用程序会卡住,直到获得响应然后继续。

另一个选项是返回 Mono<ResponseEntity>这更像是一个 promise 。你基本上是在说“当我得到答案时,我会保证会有一个 ResponseEntity,我只是不知道什么时候,所以你现在必须使用 Mono”

然后,您可以提取、转换,使用诸如 map、flatMap、zip 等函数,但只要您始终返回 Mono因为请记住,我们没有值(value),我们基本上只是在构建一个管道,当我们真正拥有值(value)时,我们希望应用程序执行的操作。

我建议您浏览Reactor Documentation了解响应式(Reactive)编程解决了什么问题,以及如何开始使用它,因为在堆栈溢出的简单答案中无法解释太多内容。

关于java - 如何以非阻塞方式从 WebClient bodyToMono 或 toEntity 获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70868671/

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