@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"
}
То, чего я хочу добиться, - это иметь возможность десериализации в SubClassV1 по умолчанию, когда schemaVersion не предоставляется в JSON, но я продолжаю получать следующую ошибку, даже когда я инициализирую schemaVersion в «1.0» в SuperClass:
com.fasterxml.jackson.databind.JsonMappingException: неожиданный токен (END_OBJECT), ожидаемый FIELD_NAME: отсутствует свойство 'schemaVersion', которое должно содержать идентификатор типа (для экспериментов класса. SuperClass)
Есть ли способ решить эту проблему?