Проблемы с возвратом пустого ответа WebClient

Я работаю над проектом, который до сих пор использовал org.springframework.web.client.RestTemplate Недавно я понял, что этот класс должен быть устаревшим в пользу Asynch org.springframework.web.reactive.function.client.WebClientфреймворк. Теперь я полностью поддерживаю это, поскольку мое приложение страдает от долгих задержек при ожидании ответов от вызовов RestTemplate (GET) (в это время я мог бы заниматься базой данных и т. Д.).
Проблема, с которой я столкнулся сейчас, заключается в том, что если я позвоню, например:

final Mono<String> call = webClient
        .get()
        .uri("/base/recordPath/1?format=json")
        .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(String.class)

когда я делаю следующий звонок, например:
System.out.println(call.block());
Я получаю ожидаемый результат (строковая версия заполненного объекта Json).
однако, если я изменю предыдущий вызов на (что я хочу сделать!):

final Mono<JsonObject> call = webClient
        .get()
        .uri("/base/recordPath/1?format=json")
        .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(JsonObject.class)

когда я делаю:
System.out.println(call.block());
Я просто получаю {} вместо заполненного JsonObject

Так похоже bodyToMono() не сделал того, что я ожидал

Когда я использовал RestTemplate, был способ зарегистрировать сериализаторы в шаблоне (хотя это не было необходимо для JsonObject), это также необходимо для WebClient? Если так, то как ты это делаешь?
Буду признателен за помощь.

Благодарность

Билл

NB Я не уверен, имеет ли это какое-либо значение, но остальная конечная точка, к которой я обращаюсь, имеет ограничение IP, поэтому, если каким-то образом WebClientесли изменить исходный IP-адрес, это может иметь некоторый эффект. Хотя я бы подумал, что это будет больше похоже на4**в каком-то смысле, я не вижу ни одного из них! Или, возможно, проблема с типом носителя, поскольку он проходит через DMZ, где опекун может изменить "неавторизованный" запрос сapplication/json к text/* например.

Еще один момент, который может иметь значение, заключается в том, что для успешного запуска приложения необходимо запустить его со следующим свойством: spring.main.web-application-type=none

Обновление
Теперь у меня работает приложение, но не так, как я хочу!
Проблема оказалась в транзитивных зависимостях, импортированных командой pom, которую я должен использовать (как родительский pom). Теперь у меня успешный старт проекта. Но все же обнаруживаем, что объект json (который теперь является Джексоном) все еще пуст (как сообщаетobject.isEmpty()).
мои зависимости / версии сейчас:
org.springframework:5.2.8.RELEASE
org.springframework.boot:2.3.3.RELEASE
com.fasterxml.jackson:2.11.2
Я знаю, что борюсь с родительским pom, который против того, что я пытаюсь сделать, но хотел бы знать, какие зависимости мне действительно нужны

0 ответов

Другие вопросы по тегам