ark*_*k0n 12 spring response resttemplate spring-boot spring-webflux
我一直在尝试遵循最简单的教程来了解如何使用WebClient,我认为与RestTemplate.
例如,https://www.baeldung.com/spring-5-webclient#4-getting-a-response
所以当我尝试用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();
Run Code Online (Sandbox Code Playgroud)
我完全不知道如何从结果DefaultClientResponse对象开始。到达物理反应体不应该这么复杂,但我离题了。
如何使用我提供的代码获取响应正文?
rew*_*olf 17
在您目前拥有的表格中,并解释行为..
WebClient webClient = WebClient.create();
webClient.get()
.uri("https://petstore.swagger.io/v2/pet/findByStatus?status=available")
.exchange()
.block();
Run Code Online (Sandbox Code Playgroud)
theblock()通过内部同步订阅 开始请求Mono,并返回结果ClientResponse. 你也可以异步调用处理这个问题subscribe()上Mono通过返回的exchange()方法,而不是block()。
在当前的形式中,block()您现在拥有关于ClientResponse对象中响应的所有元数据(即来自响应头),包括成功状态。这并不意味着响应主体已经完成通过。如果您不关心响应负载,您可以确认成功并保留它。
如果您想进一步查看响应正文,则需要将响应正文流转换为某个类。在这一点上,您可以决定是要将所有内容读入单个MonowithbodyToMono还是读入一个对象流 ( Flux) with bodyToFlux,例如在响应是可以解析为单独的 Java 对象的 JSON 数组的情况下。
但是,就您而言,您只想按原样查看 JSON。所以转换为 aString就足够了。您只需使用bodyToMonowhich 将返回一个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();
Run Code Online (Sandbox Code Playgroud)
在这里,您用于block()等待响应有效负载到达并被解析为String,但您也subscribe可以在Mono完成时响应地接收它。
需要注意的一件事是retrieve()可以用来代替exchange()快捷方式ClientResponse. 在这种情况下,您让默认行为处理错误响应。Usingexchange()将所有责任放在应用程序上,以响应ClientResponse. 在 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20039 次 |
| 最近记录: |