Java Spring webclient如何多次提取响应正文
如何重新使用webclient客户端响应?我正在使用webclient进行同步请求和响应。我是webclient的新手,不知道如何在多个地方提取响应主体Java Spring webclient如何多次提取响应正文,java,spring,spring-boot,webclient,spring-webclient,Java,Spring,Spring Boot,Webclient,Spring Webclient,如何重新使用webclient客户端响应?我正在使用webclient进行同步请求和响应。我是webclient的新手,不知道如何在多个地方提取响应主体 WebClient webClient = WebClient.builder().baseUrl("http://localhost:8080").build(); 下面是我对API的调用,它返回有效响应 ClientResponse clientResponse; clientResponse = webClient.
WebClient webClient = WebClient.builder().baseUrl("http://localhost:8080").build();
下面是我对API的调用,它返回有效响应
ClientResponse clientResponse;
clientResponse = webClient.get()
.uri("/api/v1/data")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.block();
如何在多个地方使用clientResponse?只有一次我能提取出反应体
String response = clientResponse.bodyToMono(String.class).block(); // response has value
当我第二次尝试提取响应体时(在另一个类中),它是空的
String response = clientResponse.bodyToMono(String.class).block(); // response is null
那么,有人能解释为什么响应第二次为空,以及如何多次提取响应体吗?WebClient基于Reactor netty,接收的缓冲区是一次性的 您可以做的一件事是第一次缓存结果,然后重用它 您可以在spring cloud gateway中参考此问题: 或者参考Spring Cloud gateway为缓存请求正文所做的工作: 或者,您可以编写如下代码:
String block = clientResponse.bodyToMono(String.class).block();
下一次你可以使用这个身体:
Mono.just(block);
为什么?你不应该需要这个。编译器只读取源文件一次,而且比您可能要做的任何事情都要复杂得多。这是否回答了您的问题@AbhijitSarkar我使用的是WebClient,而不是RestTemplate