如何以非阻塞方式从 WebClient bodyToMono 或 toEntity 获取对象
How to get object from WebClient bodyToMono or toEntity in a Non-Blocking way
我是 Spring WebClient 的新手。我有以下使用 WebClient 调用端点的方法,我需要从该方法 return ResponseEntity。我知道我可以调用 block()
,但无论如何我可以以非阻塞方式进行调用吗?即使我可以 return 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
}
如果你想return一个ResponseEntity
没有别的办法,你需要block
.
这样想,你做了一个请求,你需要等待响应,直到我们可以构建一个 ResponseEntity
因为我们需要 returned 数据,直到我们可以构建它。
如果您正在编写一个完整的 non-blocking 应用程序,这很糟糕,因为在所有内容的中间您基本上都在大喊停止,并且整个应用程序会冻结,直到它获得响应然后继续。
另一种选择是 return Mono<ResponseEntity>
这更像是一个承诺。你基本上是在说“当我得到答案时,我会保证会有一个 ResponseEntity,我只是不知道什么时候所以你现在必须使用 Mono`
然后你可以提取、转换,使用像 map、flatMap、zip 等函数,但只要你总是 return a Mono
因为记住,我们没有的价值,我们基本上只是建立一个管道,当我们真正拥有这个价值时,我们希望我们的应用程序做什么。
我建议您通过 Reactor Documentation 了解响应式编程解决的问题,然后如何开始使用它,因为在堆栈溢出的简单答案中解释太多了。
我是 Spring WebClient 的新手。我有以下使用 WebClient 调用端点的方法,我需要从该方法 return ResponseEntity。我知道我可以调用 block()
,但无论如何我可以以非阻塞方式进行调用吗?即使我可以 return 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
}
如果你想return一个ResponseEntity
没有别的办法,你需要block
.
这样想,你做了一个请求,你需要等待响应,直到我们可以构建一个 ResponseEntity
因为我们需要 returned 数据,直到我们可以构建它。
如果您正在编写一个完整的 non-blocking 应用程序,这很糟糕,因为在所有内容的中间您基本上都在大喊停止,并且整个应用程序会冻结,直到它获得响应然后继续。
另一种选择是 return Mono<ResponseEntity>
这更像是一个承诺。你基本上是在说“当我得到答案时,我会保证会有一个 ResponseEntity,我只是不知道什么时候所以你现在必须使用 Mono`
然后你可以提取、转换,使用像 map、flatMap、zip 等函数,但只要你总是 return a Mono
因为记住,我们没有的价值,我们基本上只是建立一个管道,当我们真正拥有这个价值时,我们希望我们的应用程序做什么。
我建议您通过 Reactor Documentation 了解响应式编程解决的问题,然后如何开始使用它,因为在堆栈溢出的简单答案中解释太多了。