挣扎着看似微不足道的东西,应该没有任何问题。我有一个带有“@class”属性的JSON,并且在调用时不知道它的类readValue()想要将它反序列化为“@class”引用的类的对象。我得到的是“LinkedHashMap”。
@Test
public void toJsonAndBack() throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Sample("id"));
assertTrue(json.contains("@class"));
Sample obj = (Sample)mapper.readValue(json, Object.class);
}
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
static class Sample {
private String id;
public Sample() {
}
public Sample(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
抱歉,如果重复,但找不到完全相同的问题。大多数人都有更复杂的案例,其中有基类,也有注释等。这些案例实际上工作正常。
我正在使用杰克逊2.6.6
答案 0 :(得分:1)
杰克逊将其转换为LinkedhashMap
,以便稍后我们可以使用其转换方法将给定的LinkedhashMap
转换为自定义对象。所以在这里你需要再添加一个步骤。
E.g:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Sample("id"));
Object obj = mapper.readValue(json, Object.class);
Sample sample = mapper.convertValue(obj, Sample.class);
因此,您可以在某处保留此obj,并可在方便时将其转换为Sample
类。
答案 1 :(得分:0)
显然添加此行会使此测试工作:
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
在这种情况下,Sample类上的注释不是必需的。