【发布时间】:2014-02-14 08:48:30
【问题描述】:
使用 Jackson(JSON/对象映射器),假设我有以下接口和类:
@JsonTypeInfo(defaultImpl = Duck.class, use = JsonTypeInfo.Id.CLASS)
public interface Animal {
}
public class Duck implements Animal {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
public class Park {
private Animal animal;
public Animal getAnimal() { return animal; }
public void setAnimal(Animal animal) { this.animal = animal; }
}
我尝试读取(反序列化)这段 JSON:
{
"animal": {
"name": "Quacky"
}
}
使用:
Park park = objectMapper.readValue(json, Park.class);
有效!即使没有任何类型信息(@class 或@type),它也能够构造Duck,因为我为Animal 接口指定了defaultImpl。
现在我希望反过来做同样的行为。
String json = objectMapper.writeValueAsString(park);
但是我得到了这个 JSON:
{
"animal": {
"@class": "com.example.Duck",
"name": "Quacky"
}
}
序列化时似乎不尊重defaultImpl!我希望从输出文件中删除“@class”属性。有谁知道我如何告诉杰克逊不要为我的Duck 添加“@class”属性?
【问题讨论】: