Я пытаюсь получить данные из одного приложения в другое через RESTful WS, и он работает, но я не могу использовать эти данные, так как я не могу его отличить... WS возвращает список таких объектов:
{id=1, forename=John, surname=Bloggs, username=jbloggs, role=Graduate Developer, office=London, skills=[{technology=Java, experience=2.5}, {technology=Web, experience=2.0}, {technology=iOS, experience=0.0}, {technology=.NET, experience=0.0}]}
чтобы получить я использую Jackson ObjectMapper:
ObjectMapper mapper = new ObjectMapper();
List<ConsultantDto> list = new ArrayList<ConsultantDto>();
try {
list = mapper.readValue(con.getInputStream(), ArrayList.class);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
после этого у меня есть 3 строки кода:
System.out.println(list.get(0));
System.out.println(list.get(0).getForename());
return list;
потому что это возвращаемое значение метода передается другому веб-сервису, который отображает правильные данные в браузере. Интересная вещь случается с двумя линиями печати, один печатает данные из верхней части этого сообщения ({id: 1...}), а другой вызывает исключение:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxx.web.dto.rp.ConsultantDto
ConsultantDto и SkillDto - это два законных класса, которые имеют все свойства, установленные для соответствия данным из WS, все геттеры/сеттеры находятся на своем месте. Насколько мне известно, LinkedHashMap хранит данные как пары "ключ: значение", поэтому я просто не вижу, откуда это исключение. Как я могу это исправить и почему ObjectMapper просто правильно разбирает значение (что он делает, когда я получаю только один консультант, а не список)?