-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Milestone
Description
I am using polymorphic deserialization with Kotlin data classes like this:
@JsonIgnoreProperties(ignoreUnknown = true)
data class Value(
val type: String,
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type",
defaultImpl = Default::class
)
val data: Default
)
object Default
trying to deserialize:
val data = """[{"type": "test","data": {},"additional": {}}]"""
val mapper = ObjectMapper()
.registerModule(KotlinModule())
val result = mapper.readValue<List<Value>>(data)
and I get this error:
Exception in thread "main" com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class app.Value] value failed for JSON property type due to missing (therefore NULL) value for creator parameter type which is a non-nullable type
at [Source: (String)"[{"type": "test","data": {},"additional": {}}]"; line: 1, column: 45] (through reference chain: java.util.ArrayList[1]->app.Value["type"])
at com.fasterxml.jackson.module.kotlin.KotlinValueInstantiator.createFromObjectWith(KotlinValueInstantiator.kt:112)
at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:198)
at com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler.complete(ExternalTypeHandler.java:316)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeUsingPropertyBasedWithExternalTypeId(BeanDeserializer.java:1001)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithExternalTypeId(BeanDeserializer.java:853)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:324)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:194)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:161)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:286)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3188)
at app.ApplicationKt.main(Application.kt:52)
If I will remove "additional" property from serialized JSON, add "additional" property to the Value class, or remove polymorphic deserialization, then the error will go away. I am using @JsonIgnoreProperties(ignoreUnknown = true)
annotation, so I expected that the original case would work.
Jackson Version: 2.10.2
Metadata
Metadata
Assignees
Labels
No labels