Как использовать OpenFeign, чтобы получить массив pojo? - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь использовать клиент OpenFeign для запуска API, получения некоторого JSON и преобразования его в массив POJO.

Ранее я просто получал строку JSON и использовал Gson для ее преобразованияк массиву, как это

FeignInterface {
    String get(Request req);
}
String json = feignClient.get(request);
POJO[] pojoArray = new Gson().fromJson(json, POJO[].class);

Это работало.Я хотел бы исключить дополнительный шаг и симулировать автоматическое декодирование JSON и вернуть POJO напрямую, поэтому я пытаюсь это

FeignInterface {
    POJO[] get(Request req);
}
POJO[] pojoArray = feignClient.getJsonPojo(request);`

Я сталкиваюсь с этой ошибкой

feign.codec.DecodeException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $

Оба метода использовали один и тот же строитель

feignClient = Feign.builder()
     .encoder(new GsonEncoder())
     .decoder(new GsonDecoder())
     .target(FeignInterface.class, apiUrl);

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 07 марта 2019

Вы нарушили JSON полезную нагрузку. Перед сериализацией вам необходимо удалить все неподдерживаемые символы. Feign позволяет это:

Если вам нужно предварительно обработать ответ, прежде чем передать его декодеру, Вы можете использовать метод построителя mapAndDecode. Пример использования имея дело с API, который обслуживает только jsonp, вам может понадобиться распакуйте jsonp перед отправкой на Json декодер по вашему выбору:

public class Example {
  public static void main(String[] args) {
    JsonpApi jsonpApi = Feign.builder()
         .mapAndDecode((response, type) -> jsopUnwrap(response, type), new GsonDecoder())
         .target(FeignInterface.class, apiUrl);
  }
}

Итак, вам нужно сделать то же самое в вашей конфигурации и:

  • trim ответ и удаление всех whitespaces в начале и в конце полезной нагрузки.
  • удалить все new_line символов, таких как: \r\n, \r, \n

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

...