Spring Boot Webclient的检索与交换

时间:2019-10-16 09:44:02

标签: spring-boot reactive spring-webclient

我最近在我的 Spring boot 项目中开始使用WebClient。 有人可以阐明exchangeretrieveWebClient方法之间的区别/用法。

我知道exchange返回Mono<ClientResponse>,而retrieve返回ResponseSpec,我只想知道何时/为什么应该使用它们中的每一个。

非常感谢。

2 个答案:

答案 0 :(得分:4)

根据spring Webclient api documentation,两者之间的区别在于交换交换除了正文以外还获取其他HTTP响应信息(例如标头和状态),而检索仅返回正文信息。

因此,如果您仅需要正文信息,则应使用检索,因为它是用于交换然后获取正文的快捷方式,但是如果您需要其他信息(例如http状态),则必须使用exchange。

答案 1 :(得分:4)

添加到 @JArgente的答案中。

根据retrieve()方法的官方文档:

执行HTTP请求并获取响应正文

...

此方法是使用exchange()并通过以下方式解码响应正文的快捷方式 ClientResponse。

exchange()方法

执行HTTP请求并返回带有响应状态和标头的ClientResponse。然后,您可以使用响应方法消耗身体:


retrieve()方法对ClientResponse对象进行解码,然后将现成的对象交给您使用。它没有用于处理异常的非常好的api。

但是,另一方面,exchange()方法将ClientResponse对象本身以及响应状态和标头交给您。通过交换方法,您可以对响应对象进行精细的控制,并且可以更好地处理响应对象和异常。

如果您只想使用一些API,请使用retrieve()

如果您想更好地控制响应对象,标头和异常,请使用exchange()