gpt4 book ai didi

spring - 如何从 Spring WebClient 获取响应 json

转载 作者:行者123 更新时间:2023-12-03 13:49:57 35 4
gpt4 key购买 nike

我一直在尝试遵循最简单的教程来了解如何使用 WebClient ,据我所知,与 RestTemplate 相比,这是下一个最重要的事情。 .
例如,https://www.baeldung.com/spring-5-webclient#4-getting-a-response
enter image description here
所以当我尝试用 https://petstore.swagger.io/v2/pet/findByStatus?status=available 做同样的事情时这应该返回一些json,

WebClient webClient = WebClient.create();
webClient.get().uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available").exchange().block();
enter image description here
我完全不知道如何从结果开始 DefaultClientResponse对象。到达物理 react 体不应该这么复杂,但我离题了。
如何使用我提供的代码获取响应正文?

最佳答案

在您目前拥有的表格中,并解释行为..

WebClient webClient = WebClient.create();
webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block();
block()通过内部同步订阅 Mono 来启动请求,并返回结果 ClientResponse .您也可以通过调用 subscribe() 异步处理此问题。在 Monoexchange() 返回方法,而不是 block() .
在当前形式中,在 block() 之后您现在拥有关于 ClientResponse 中的响应的所有元数据(即来自响应 header )对象,包括成功状态。这并不意味着响应主体已经完成通过。如果您不关心响应负载,您可以确认成功并保留它。
如果您想进一步查看响应正文,则需要将响应正文流转换为某个类。这一点您可以决定是否要将所有内容都读入一个 MonobodyToMono或使用 Flux 进入对象流 ( bodyToFlux ) ,例如在响应是可以解析为单独的 Java 对象的 JSON 数组的情况下。
但是,就您而言,您只想按原样查看 JSON。所以转换为 String就足够了。您只需使用 bodyToMono这将返回 Mono对象。
WebClient webClient = WebClient.create();
String responseJson = webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block()
.bodyToMono(String.class)
.block();
在这里您使用 block()等待响应负载到达并被解析为 String ,但你也可以 subscribeMono当它完成时 react 性地接收它。
需要注意的一件事是 retrieve()可以用来代替 exchange()快捷方式 ClientResponse .在这种情况下,您让默认行为处理错误响应。使用 exchange()将所有责任放在应用程序上,以响应 ClientResponse 上的错误响应。 .阅读更多 in the Javadoc . retrieve()版本如下所示。无需 block()因为您只关心响应数据。
WebClient webClient = WebClient.create();
String responseJson = webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.retrieve()
.bodyToMono(String.class)
.block();

关于spring - 如何从 Spring WebClient 获取响应 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62822976/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com