我正在使用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();
}
getTypeSubType1中的SubType2被覆盖(实现)。问题在于,当SubType1SubType2的实例映射到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"}

09-27 02:02