我最近开始WebClient
在我的Spring Boot项目中使用。有人可以exchange
对retrieve
.WebClient
我知道exchange
返回Mono<ClientResponse>
和retrieve
返回ResponseSpec
,我只想知道何时/为什么应该使用它们中的每一个。
非常感谢。
我最近开始WebClient
在我的Spring Boot项目中使用。有人可以exchange
对retrieve
.WebClient
我知道exchange
返回Mono<ClientResponse>
和retrieve
返回ResponseSpec
,我只想知道何时/为什么应该使用它们中的每一个。
非常感谢。
根据spring Webclient api文档,两者之间的区别在于exchange检索除了body之外的其他http响应信息,如headers和status,而retrieve只返回body信息。
所以如果你只需要body信息你应该使用retrieve,因为它是交换然后获取body的快捷方式,但是如果你需要http状态等其他信息你必须使用exchange。
添加到@JArgente 的答案。
根据方法的官方文档retrieve()
:
执行 HTTP 请求并检索响应正文。
...
此方法是使用 exchange() 并通过 ClientResponse 解码响应正文的快捷方式。
和exchange()
方法
执行 HTTP 请求并返回带有响应状态和标头的 ClientResponse 。然后,您可以使用响应的方法来使用主体:
该retrieve()
方法解码ClientResponse
对象并将现成的对象交给您供您使用。它没有用于处理异常的非常好的 api。
但是另一方面,该exchange()
方法将 ClientResponse 对象本身连同响应状态和标头一起交给您。使用交换方法,您可以对响应对象进行细粒度控制,并以更好的方式处理响应对象和异常。
如果您只想使用一些 api,请使用retrieve()
.
如果您想更好地控制响应对象、标头和异常,请使用exchange()
.
更新 1
从Spring 5.3开始,由于可能的内存/连接泄漏,该exchange()
方法已被弃用。或者可以代替使用。exchangeToMono()
exchangeToFlux()
感谢@rhubarb的更新。