RestTemplate получить лист городов
Как я могу получить list из полученного Json?
Получаю строку из json
String line = restTemplate.postForObject(URL, root ,String.class);
ObjectMapper om = new ObjectMapper();
Cities cities = om.readValue(line, Cities.class);
Класс, обьект которого я хочу получить
@JsonIgnoreProperties(ignoreUnknown = true)
public class Cities {
@JsonProperty("Description")
private List<String> citiesList;
public List<String> getCitiesList() {
return citiesList;
}
public void setCitiesList(List<String> citiesList) {
this.citiesList = citiesList;
}
}
При всех попытках получал null
Вывод строки line:
{
"success": true,
"data": [{
"TotalCount": 1,
"Addresses": [{
"Present": "\u0441. \u0424\u043e\u043d\u0442\u0430\u043d\u043a\u0430, \u041b\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439 \u0440-\u043d, \u041e\u0434\u0435\u0441\u044c\u043a\u0430 \u043e\u0431\u043b.",
"Warehouses": 4,
"MainDescription": "\u0424\u043e\u043d\u0442\u0430\u043d\u043a\u0430",
"Area": "\u041e\u0434\u0435\u0441\u044c\u043a\u0430",
"Region": "\u041b\u0438\u043c\u0430\u043d\u0441\u044c\u043a\u0438\u0439",
"SettlementTypeCode": "\u0441.",
"Ref": "0ddaf157-4b3a-11e4-ab6d-005056801329",
"DeliveryCity": "e57694f2-14cb-11e5-add9-005056887b8d",
"AddressDeliveryAllowed": true,
"StreetsAvailability": false,
"ParentRegionTypes": "\u043e\u0431\u043b\u0430\u0441\u0442\u044c",
"ParentRegionCode": "\u043e\u0431\u043b.",
"RegionTypes": "\u0440\u0430\u0439\u043e\u043d",
"RegionTypesCode": "\u0440-\u043d"
}]
}],
"errors": [],
"warnings": [],
"info": [],
"messageCodes": [],
"errorCodes": [],
"warningCodes": [],
"infoCodes": []
}
Ответы (1 шт):
Причина по которой Вы получаете null в том что пытаетесь распарсить массив строк с названием "Description", текущий код работал бы только в случае если JSON был примерно таким:
{
"Description": ["string1","string2"]
}
Для лучшего понимания советую прочитать про типы данных в JSON. Про вложенность в JSON. Вам нужно например понимать разницу между массивом строк и массивом объектов, а также как выглядят простые поля из строк или поля с целочисленными значениями. А также значения аннотаций вроде @JsonProperty.
Для того чтобы решить задачу, я советую использовать сервисы, которые автоматически конвертируют JSON в объекты Java грубо говоря. Например http://www.jsonschema2pojo.org/. Предпочтительно использовать такие конверторы, но нужно понимать как устроены сгенерированные классы.
Последовательность работы на этом сервисе такая:
- Вставляете свой JSON в поле
- Заполняете Package, Class name например называете "Response"
- Выбираете нужные настройки, Source type - JSON, Annotation style - Jackson 2.x
- Снизу нажимаете на Zip и скачиваете готовые Java классы
- Добавляете в свой проект
Далее в Вашем случае вместо кода
Cities cities = om.readValue(line, Cities.class);
теперь указываете сгенерированный класс
Response response = om.readValue(line, Response.class);
Далее из объекта response уже можете вытаскивать данные, которые нужны для работы.