Ошибка синтаксического анализа Java Spring JSON: невозможно десериализовать экземпляр из токена START_ARRAY

У меня есть метод с таким вызовом restTemplate:

restTemplate.getForObject(apiUrl ,Someclass.class);

Someclass.class:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Imp implements Serializable {
    @JsonProperty("Id")
    private String Id;

    @JsonProperty("ReportId")
    private String ReportId;

    @JsonProperty("Title")
    private String Title;

    @JsonProperty("Name")
    private String Name;

    @JsonProperty("Uri")
    private String Uri;

}

API возвращает массив, и я получаю ошибка: org.springframework.web.client.RestClientException: Ошибка при извлечении ответа для типа [класс ...] и типа содержимого [приложение / json; charset = utf-8]; вложенное исключение - org.springframework.http.converter.HttpMessageNotReadableException: ошибка синтаксического анализа JSON: невозможно десериализовать экземпляр com... из токена START_ARRAY; вложенное исключение com.fasterxml.jackson.databind.exc.MismatchedInputException: невозможно десериализовать экземпляр com... из токена START_ARRAY

Какой метод restTempalte следует использовать для получения правильного ответа API? Или в чем проблема? Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
9 655
1

Ответы 1

Вы сказали, что API возвращает массив.

Но ваша строчка кода restTemplate.getForObject(apiUrl ,Someclass.class); будет работать только для одного объекта Someclass.

Вы должны использовать новый ParameterizedTypeReference<List<Someclass.class>> вместе с методом обмена.

См. Ссылку ниже

Получить список объектов JSON с помощью Spring RestTemplate

ParameterizedTypeReference не распознается IDE.

Guille 26.11.2018 16:47

Проверьте документ docs.spring.io/spring-framework/docs/current/javadoc-api/org‌ /…. Возможно, отсутствуют операторы импорта

unnik 26.11.2018 17:04

хорошо, мне пришлось импортировать его вручную, вы можете сказать, каким должен быть метод? Если я сделаю это: restTemplate.getForObject (apiUrl, ParameterizedTypeReference <List <Someclass.class >>); Ожидается выражение, указанное IDE ...

Guille 26.11.2018 17:31

я мог бы решить это следующим образом: stackoverflow.com/questions/23674046/… yonia's answer

Guille 26.11.2018 18:58

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