Невозможно получить ответ из API Springboot, используя WebClient, но хорошо работает при использовании RestTemplate, вызJAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно получить ответ из API Springboot, используя WebClient, но хорошо работает при использовании RestTemplate, выз

Сообщение Anonymous »

Существует существующий API, разработанный с использованием Springboot и Java 21, и он отлично работает, когда потребитель также является Java 21. Мне пришлось переключить API на Java 8 и, следовательно, также пониженная версия Springboot (2.3.12). Потребитель - это приложение также основано на Java 8 и не может быть обновлен до Java 21. Ниже я вызывает API с помощью WebClient: < /p>

Код: Выделить всё

webClient
.get()
.uri(uri)
.headers(httpHeaders -> setHeaders(httpHeaders, headers))
.retrieve()
.onStatus(
status -> !status.is2xxSuccessful(),
clientResponse ->
clientResponse
.bodyToMono(ErrorResponse.class)
.flatMap(
response ->
Mono.error(
new CustomServiceException(
clientResponse.statusCode(), response))))
.bodyToMono(responseType)
.block();
< /code>
Настройка WebClient следующим образом: < /p>
WebClient.builder().baseUrl("http://172.22.35.203:8081").build();
< /code>
Я использую ниже Spring-webflux зависимость: < /p>

org.springframework
spring-webflux
5.3.39

Проблема заключается в том, что приложение, похоже, висит при выполнении Block () . Я добавил тайм -аут и и это, чтобы зарегистрировать ошибку: < /p>
.doOnError(error -> System.out.println("Error signal detected" + error))
< /code>
И я получаю приведенную ниже ошибку: < /p>
Exception thrown from webclient: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 30000ms in 'flatMap' (and no fallback has been configured)
reactor.core.Exceptions$ReactiveException: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 30000ms in 'flatMap' (and no fallback has been configured
< /code>
, что предполагает, что хост не отправляет никакого ответа. Но я сомневаюсь, что это так, как отправка запроса через почтальона и использование Resttemplate действительно возвращает ответ. Ниже я использую Resttemplate и это печатает ответ: < /p>
restTemplate.getForEntity("http://172.22.35.203:8081/v1/customer/s ... mber=false", String.class).getBody()
< /code>
Кроме того, я добавил журналы к уровню контроллера и репозитория, и с помощью журналов я могу подтвердить, что там нет ошибок.
Я повторно обращаю здесь ту же самую конфигурацию WebClient, когда API работал на Java 21. (API в основном является многомодульным проектом Maven, и один из проектов-это простой клиент, который подключает к AP). /> Так, в основном, я хочу знать, как я могу отладить/вероятную причину сбоя, когда называется block ().

Подробнее здесь: https://stackoverflow.com/questions/797 ... ks-well-wh

Вернуться в «JAVA»