我正在使用Jackson Databind 2.7.2,并且在接口上具有以下注释:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = SubType1.class, name = "SubType1"),
@JsonSubTypes.Type(value = SubType2.class, name = "SubType2")})
public interface Common {
String getType();
}
getType
和SubType1
中的SubType2
被覆盖(实现)。问题在于,当SubType1
或SubType2
的实例映射到JSON时,它包含两个具有相同值的字段type
:{
"type" : "SubType1",
... // Other properties
"type" : "SubType1"
}
如何防止 jackson 呈现重复字段?
最佳答案
Jackson会一次渲染类型,因为您已经在JsonTypeInfo批注中告诉过它,然后再次渲染它,因为它看到了一个吸气剂,因此对getType()
发挥了魔力并添加了另一个属性。如果将@JsonIgnore
放在接口中的方法上,它将呈现一次:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = SubType1.class, name = "SubType1"),
@JsonSubTypes.Type(value = SubType2.class, name = "SubType2")})
public interface Common {
@JsonIgnore
String getType();
}
产生:
{"type": "SubType1"}