У меня есть полиморфный тип данных c, который я пытаюсь десериализовать непосредственно в его подтип (для обратной совместимости), но без информации о типе я не могу десериализовать, даже если я непосредственно ссылаюсь на подтип в readValue
вызов объекта сопоставления. Есть ли какие-нибудь волхвы Джексона c, которые я могу использовать, чтобы исправить это?
class SerializationTest {
@Test
fun serializationTest() {
val serializedFoo = """ {"base":"blah", "foo": "something"} """
val foo = ObjectMapper().registerModule(KotlinModule()).readValue(serializedFoo, Foo::class.java)
println(foo)
}
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
@JsonSubTypes(
JsonSubTypes.Type(value = Foo::class),
JsonSubTypes.Type(value = Bar::class)
)
internal abstract class Base {
abstract val base: String
}
internal class Foo(@JsonProperty("base") override val base: String,
@JsonProperty("foo") val foo: String): Base()
internal class Bar(@JsonProperty("base") override val base: String,
@JsonProperty("foo") val bar: String): Base()
}
Не удается с
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class com.foo.bar.SerializationTest$Foo]: missing type id property '@class'
В настоящее время я использую Джексона 2.9.8