【发布时间】: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