我最近在我的 Spring boot 项目中开始使用WebClient
。
有人可以阐明exchange
中retrieve
和WebClient
方法之间的区别/用法。
我知道exchange
返回Mono<ClientResponse>
,而retrieve
返回ResponseSpec
,我只想知道何时/为什么应该使用它们中的每一个。
非常感谢。
答案 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()
。