Я пытался использовать функцию registerSubtypes
из Jackson
после этого урока .
Поэтому я преобразовал этот код в Kotlin
примерно так:
interface Vehicle {
val name: String
}
class Car @JsonCreator constructor(@JsonProperty("name") override val name: String) : Vehicle
class Truck @JsonCreator constructor(@JsonProperty("name") override val name: String) : Vehicle
class Vehicles @JsonCreator constructor(@JsonProperty("vehicles") var vehicles: List<Vehicle>)
fun main() {
val MAPPER = jacksonObjectMapper()
MAPPER.registerSubtypes(NamedType(Truck::class.java, "Truck"))
MAPPER.registerSubtypes(NamedType(Car::class.java, "Car"))
val vehicles = Vehicles(listOf(Car("Dodge"), Truck("Scania")))
val json = MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(vehicles)
println(json)
}
Но результат будет следующим:
{
"vehicles" : [ {
"name" : "Dodge"
}, {
"name" : "Scania"
} ]
}
Он не содержит поля "@type"
, поэтому десериализация не работает.
Любая идея, какисправить это?
Версия Джексона Котлина: 2.9.6