@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,但即使我将schemaVersion初始化为" 1.0"我仍然会收到以下错误:在SuperClass中:
com.fasterxml.jackson.databind.JsonMappingException:意外的令牌(END_OBJECT),预期的FIELD_NAME:缺少属性' schemaVersion'这是包含类型id(对于类Experi.superClass)
有什么方法可以解决这个问题吗?