Проблемы с возвратом пустого ответа 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, который против того, что я пытаюсь сделать, но хотел бы знать, какие зависимости мне действительно нужны