14
我试图通过REST风格的WS从一个应用程序中的数据得到另一个和它的作品,但因为我不能施放它,我不能使用此数据... WS返回一个对象像这样的列表:如何将LinkedHashMap转换为自定义java对象?
{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}]}
让我用它杰克逊的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;
回报,因为该方法的返回值被传递到加时赛她的web服务在浏览器中显示正确的数据。有趣的事情发生的两个打印行,一个来自这篇文章的顶部打印数据({ID:1 ...}),但另外一个抛出异常:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxx.web.dto.rp.ConsultantDto
ConsultantDto和SkillDto是两个合法的班其将所有属性设置为与来自WS的数据相匹配,所有getter/setter都已就位。就我而言,LinkedHashMap将东西存储为key:value对,所以我只是看不到这个异常来自哪里。我该如何解决这个问题,为什么ObjectMapper不能正确解析这个值(当我得到一个ConsultantDto而不是一个List时)?
@Enno对于泛型T类型,是否可以使用相同的东西? – Stephane