нет конструктора String-аргумента / фабричного метода для десериализации из значения String - Исключение при десериализации объекта json из restTemplate - PullRequest
1 голос
/ 29 мая 2020

Возникла проблема при вызове для получения ответа json и его анализа.

[
    {
        "name": "john doe",
        "age": "24",
        "address": "{\"state\":\"LA\",\"country\":\"US\"}"
    }
]

Модели:

Человек. java

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Person {
    private String name;
    private String age;
    private Address address;
}

Адрес. java

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Address {
    private String state;
    private String country;
}

Код для чтения этих данных,

ResponseEntity<List<Person>> response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET,requestEntity,new ParameterizedTypeReference<List<Person>>() {});

Однако я получаю исключение ниже:

RestClientException при вызове ABS ServiceError, пока извлечение ответа для типа [java.util.List<com.bp.model.Person>] и типа содержимого [application / json; charset = UTF-8]; вложенное исключение - org.springframework.http.converter.HttpMessageNotReadableException: JSON ошибка синтаксического анализа: не удается создать экземпляр com.bp.model.Address (хотя существует хотя бы один создатель): нет конструктора / фабричного метода String-аргумента для десериализации из значения String (' {"штат": "Лос-Анджелес", "страна": "США"} '); вложенное исключение: com.faster xml .jackson.databind.ex c .MismatchedInputException: невозможно создать экземпляр com.bp.model.Address (хотя существует хотя бы один создатель): нет конструктора / фабричного метода String-аргумента для десериализации из значения String ('{"состояние": "В", "бренд": "гимн"}') в [Источник: (PushbackInputStream); строка: 1, столбец: 325] (через цепочку ссылок: java .util.ArrayList [0] -> com.bp.model.Person ["адрес"])

1 Ответ

0 голосов
/ 30 мая 2020

Код правильный, но есть проблема с JSON. Адрес представляет собой строку, а не объект JSON. Чтобы он работал, это должно быть что-то вроде:

"address": {"state": "LA", "country": "US"}

Без внешних кавычек и escape-символов.

...