Spring 启动 Webclient 的检索与交换
Spring boot Webclient's retrieve vs exchange
我最近开始在我的 Spring boot 项目中使用 WebClient
。
有人可以对 WebClient
.
中 exchange
和 retrieve
方法之间的 differences/usages 有所了解吗?
我明白exchange
returnsMono<ClientResponse>
和retrieve
returnsResponseSpec
,我只想知道when/why我应该使用它们中的每一个。
非常感谢。
根据spring Webclient api documentation,两者之间的区别在于,exchange 除了获取 body 之外,还获取其他 http 响应信息,例如 headers 和 status,而仅获取 returns body 信息。
所以如果你只需要body信息你应该使用retrieve,因为它是交换然后获取body的快捷方式,但是如果你需要其他信息比如http状态你必须使用exchange。
添加到 @JArgente 的 回答。
根据retrieve()
方法的官方文档:
Perform the HTTP request and retrieve the response body.
...
This method is a shortcut to using exchange() and decoding the response body through
ClientResponse.
和exchange()
方法
Perform the HTTP request and return a ClientResponse with the response status and headers. You can then use methods of the response to consume the body:
retrieve()
方法解码 ClientResponse
object 并交给您 ready-made object 供您使用。它没有很好的 api 来处理异常。
然而,另一方面,exchange()
方法会向您提供 ClientResponse object 本身以及响应状态和 headers。使用交换方法,您可以获得对响应 object 的细粒度控制以及处理响应 object 和异常的更好方法。
如果你只想消费一些 api 就去 retrieve()
.
如果您想更好地控制您的响应 object、headers 和例外情况,请使用 exchange()
.
更新 1
从Spring5.3开始,可以使用exchange()
method is deprecated due to possible memory/connection leaks. exchangeToMono()
or exchangeToFlux()
代替
感谢 @rhubarb 的更新。
我最近开始在我的 Spring boot 项目中使用 WebClient
。
有人可以对 WebClient
.
exchange
和 retrieve
方法之间的 differences/usages 有所了解吗?
我明白exchange
returnsMono<ClientResponse>
和retrieve
returnsResponseSpec
,我只想知道when/why我应该使用它们中的每一个。
非常感谢。
根据spring Webclient api documentation,两者之间的区别在于,exchange 除了获取 body 之外,还获取其他 http 响应信息,例如 headers 和 status,而仅获取 returns body 信息。
所以如果你只需要body信息你应该使用retrieve,因为它是交换然后获取body的快捷方式,但是如果你需要其他信息比如http状态你必须使用exchange。
添加到 @JArgente 的 回答。
根据retrieve()
方法的官方文档:
Perform the HTTP request and retrieve the response body.
...
This method is a shortcut to using exchange() and decoding the response body through ClientResponse.
和exchange()
方法
Perform the HTTP request and return a ClientResponse with the response status and headers. You can then use methods of the response to consume the body:
retrieve()
方法解码 ClientResponse
object 并交给您 ready-made object 供您使用。它没有很好的 api 来处理异常。
然而,另一方面,exchange()
方法会向您提供 ClientResponse object 本身以及响应状态和 headers。使用交换方法,您可以获得对响应 object 的细粒度控制以及处理响应 object 和异常的更好方法。
如果你只想消费一些 api 就去 retrieve()
.
如果您想更好地控制您的响应 object、headers 和例外情况,请使用 exchange()
.
更新 1
从Spring5.3开始,可以使用exchange()
method is deprecated due to possible memory/connection leaks. exchangeToMono()
or exchangeToFlux()
代替
感谢 @rhubarb 的更新。