Spring веб-клиент, как извлечь тело ответа несколько раз - PullRequest
0 голосов
/ 06 августа 2020

как повторно использовать ответ клиента веб-клиента? Я использую веб-клиент для синхронного запроса и ответа. Я новичок в веб-клиенте и не уверен, как извлечь тело ответа в нескольких местах

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

Когда я пытаюсь извлечь тело ответа второй раз (в другом классе), оно равно null

String response = clientResponse.bodyToMono(String.class).block(); // response is null

Итак, могу кто-нибудь объяснит, почему второй раз ответ равен нулю и как несколько раз извлечь тело ответа?

1 Ответ

0 голосов
/ 07 августа 2020

WebClient основан на Reactor-netty, и буфер получен разовый.

Единственное, что вы могли бы сделать, - это кэшировать результат в первый раз, а затем использовать его повторно.

Вы можете обратиться к этой проблеме в Spring Cloud Gateway: https://github.com/spring-cloud/spring-cloud-gateway/issues/1861

Или обратитесь к тому, что шлюз Spring Cloud делает для кеширования тела запроса: https://github.com/spring-cloud/spring-cloud-gateway/blob/master/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/AdaptCachedBodyGlobalFilter.java

Или вы можете написать свой код, например:

String block = clientResponse.bodyToMono(String.class).block();
    

И в следующий раз вы можете использовать это тело:

Mono.just(block);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...