@Builder
@Getter
@ToString
public class DummyParentClass {
@NonNull
@Nonnull
private DummyAbstractType dummyAbstractType;
@JsonTypeInfo(use =
JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "dummyAbstractType")
@Valid @Nonnull @NonNull private DummyAbstract dummyAbstract;
}
public enum DummyAbstractType {
A
}
@JsonSubTypes({
@JsonSubTypes.Type(value = DummyAbstractImplA.class, name = "A")
})
public abstract class DummyAbstract {
public abstract void validate();
}
@Builder
@Getter
@ToString
public class DummyAbstractImplA extends DummyAbstract {
@Nonnull
@NonNull
private String a;
@Nonnull @NonNull private String b;
@Override
public void validate() {
}
}
Deserialise Code:String json2 = "{\n" +
" \"dummyAbstract\": {\n" +
" \"a\": \"as\",\n" +
" \"b\": \"as\"\n" +
" },\n" +
" \"dummyAbstractType\": \"A\"\n" +
"}";
DummyParentClass dummyParentClass = objectMapper.readValue(json2, DummyParentClass.class);
System.
out.println(dummyParentClass);
Error:com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `dummy.DummyParentClass`, problem: Internal error: no creator index for property 'dummyAbstract' (of type com.fasterxml.jackson.databind.deser.impl.FieldProperty)
at [Source: (String)"{
"dummyAbstract": {
"a": "as",
"b": "as"
},
"dummyAbstractType": "A"
}"; line: 7, column: 1]
at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:2047)
at com.fasterxml.jackson.databind.DeserializationContext.handleInstantiationProblem(DeserializationContext.java:1400)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapInstantiationProblem(BeanDeserializerBase.java:1866)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeUsingPropertyBasedWithExternalTypeId(BeanDeserializer.java:1090)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithExternalTypeId(BeanDeserializer.java:929)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:349)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597)