避免在Jackson中由JsonTypeInfo生成重复字段

时间:2016-03-07 13:46:10

标签: java json jackson

我使用的是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();
}

getTypeSubType1SubType2中被覆盖(已实施)。问题是,当SubType1SubType2的实例映射到JSON时,它包含两个名为type且具有相同值的字段:

{
  "type" : "SubType1",
  ... // Other properties
  "type" : "SubType1"
}

如何防止杰克逊渲染重复字段?

1 个答案:

答案 0 :(得分:-1)

杰克逊渲染类型一次,因为你已经在JsonTypeInfo注释中告诉它,然后它再次呈现它,因为它看到一个getter,所以它在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"}