【问题标题】:Allow jackson polymorphic deserialization with missing deserializing property允许缺少反序列化属性的杰克逊多态反序列化
【发布时间】:2018-04-27 02:03:21
【问题描述】:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "superClassProperty",
    "schemaVersion"
})
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "schemaVersion")
@JsonSubTypes({
    @JsonSubTypes.Type(value = SubClassV1.class, name = "1.0"),
    @JsonSubTypes.Type(value = SubClassV2.class, name = "2.0"),
})
public class SuperClass {
    @JsonProperty("superClassProperty")
    private String superClassProperty;
    @JsonProperty("schemaVersion")
    private String schemaVersion = "1.0";

    @JsonProperty("superClassProperty")
    public String getSuperClassProperty() {
        return superClassProperty;
    }
    @JsonProperty("superClassProperty")
    public void setSuperClassProperty(String superClassProperty) {
        this.superClassProperty = superClassProperty;
    }

    @JsonProperty("schemaVersion")
    public String getSchemaVersion() {
        return schemaVersion;
    }

    @JsonProperty("schemaVersion")
    public void setSchemaVersion(String schemaVersion) {
        this.schemaVersion = schemaVersion;
    }   
}

public class SubClassV1 extends SuperClass {

    @JsonProperty("property1")
    private String property1;

    @JsonProperty("property1")
    public String getProperty1() {
        return this.property1;
    }

    @JsonProperty("property1")
    public void setProperty1(String var1) {
        this.property1 = var1;
    }

    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

public class SubClassV1 extends SuperClass {

    @JsonProperty("property2")
    private String property2;

    @JsonProperty("property2")
    public String getProperty2() {
        return this.property2;
    }

    @JsonProperty("property2")
    public void setProperty2(String var2) {
        this.property2 = var2;
    }

    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

我的 JSON 字符串是:

{
    "superClassProperty":"testValue",
    "property1":"property1"
}

我想要实现的是能够在 JSON 中未提供 schemaVersion 时默认反序列化为 SubClassV1,但即使我在 SuperClass 中将 schemaVersion 初始化为“1.0”,我也会不断收到以下错误:

com.fasterxml.jackson.databind.JsonMappingException:意外令牌 (END_OBJECT),预期 FIELD_NAME:缺少包含类型 ID 的属性“schemaVersion”(用于类 Experiments.SuperClass)

有没有办法解决这个问题?

【问题讨论】:

    标签: json objectmapper


    【解决方案1】:

    似乎我可以使用 JsonTypeInfo 的 defaultImpl 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多