#spring-boot #gson #microservices #feign
Вопрос:
Обслуживайте возвращаемый ответ как gson.JSONObject. Из Службы B звонит в Службу A с Притворным клиентом. Как справиться с ответом? Попробовал ниже:
@FeignClient(name = "ABC") public interface TestDataProviderApi { @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) **JsonObject** getData(@PathVariable("data-type") String dataType); } @FeignClient(name = "ABC") public interface TestDataProviderApi { @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) **Object** getData(@PathVariable("data-type") String dataType); } @FeignClient(name = "ABC") public interface TestDataProviderApi { @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) **JSONObject** getData(@PathVariable("data-type") String dataType); }
Ничего не помогало. Либо ответ печатается в виде исключений {}, либо в формате JSON. Но в сервисе A в журналах говорится, что он вернул правильный JSON, например {«a»:1}. Как обработать значение? Конечная цель состоит в том, чтобы прочитать ответы от притворного клиента и получить значение с помощью Jayway JSONPath.
заранее спасибо!
Комментарии:
1. вы не можете вернуть ResponseEntitylt;Объектgt;?
Ответ №1:
Весенняя загрузка с использованием сериализации Джексона-де-сериализация по умолчанию. Поскольку возвращаемый объект имеет тип gson, добавление приведенного ниже свойства помогло получить правильный ответ с типом: JSONObject.
spring.http.converters.preferred-json-mapper=gson
Но это повлияло на поведение других контроллеров и клиентов, так как все начало ожидать объектов gson (не удалось удалить сериализацию JSONObjects).
Вместо этого при притворной маркировке клиента возвращаемый тип как Object
и в слое обслуживания используется преобразование типов с Gson()
помощью.