我试图通过 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();
}
之后我有三行代码:
System.out.println(list.get(0));
System.out.println(list.get(0).getForename());
return list;
返回是因为该方法的返回值传递给其他Web服务,以在浏览器中显示正确的数据。有趣的事情发生在两个打印行中,一个打印来自此帖子顶部的数据({id:1 ...}),但另一个抛出异常:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxx.web.dto.rp.ConsultantDto
ConsultantDto 和 SkillDto 是两个合法的类,它们的所有属性都设置为与 WS 中的数据匹配,所有的 getters/setters 都已经就位。据我所知,LinkedHashMap 将东西存储为键值对,所以我不知道这个异常是从哪里来的。我该如何修复它?为什么 ObjectMapper 不能正确地解析值(当我获得单个 ConsultantDto 而不是 List 时,它确实可以)?
Class<T> type;
List<T> myObjects = mapper.readValue(jsonInput,mapper.getTypeFactory().constructCollectionType(ArrayList.class, type));
- Datz