避免Jackson中的JsonTypeInfo生成重复字段

pw136qt2  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(206)

我使用的是JacksonDatabind 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的示例被Map到JSON时,它包含两个名为type的字段,这两个字段具有相同的值:

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

如何防止Jackson渲染重复字段?

w7t8yxp5

w7t8yxp51#

如果有人碰巧遇到此错误,可以通过更改缺省的 include 属性来解决

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.EXISTING_PROPERTY,
    visible = true,
    property = "type"
)

默认情况下Jackson使用JsonTypeInfo.as.PROPERTY
参考:https://fasterxml.github.io/jackson-annotations/javadoc/2.4/com/fasterxml/jackson/annotation/JsonTypeInfo.As.html

dced5bon

dced5bon2#

Jackson呈现类型一次是因为你在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"}

相关问题