Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring webclient如何多次提取响应正文_Java_Spring_Spring Boot_Webclient_Spring Webclient - Fatal编程技术网

Java Spring 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的新手,不知道如何在多个地方提取响应主体

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