Вложенный полиморфизм в модуле Джексона KotlinJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вложенный полиморфизм в модуле Джексона Kotlin

Сообщение Anonymous »

Я просто пытаюсь десериализовать вложенный полиморфный класс данных, но не могу этого сделать. Предыдущие вопросы и ответы не очень помогли мне в выполнении этой задачи, которая выглядит простой. Я все еще получаю эту ошибку независимо от того, добавляю ли я конструктор, добавляю больше аннотаций и т. д. Очень запутался.
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `Dog` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

import com.fasterxml.jackson.annotation.JsonSubTypes
import com.fasterxml.jackson.annotation.JsonTypeInfo
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonSubTypes(
JsonSubTypes.Type(value = Dog::class, name = "dog"),
)
sealed class Animal(val name: String)

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonSubTypes(
JsonSubTypes.Type(value = Labrador::class, name = "labrador")
)
sealed class Dog(name: String, val breed: String) : Animal(name)

class Labrador(name: String, val color: String) : Dog(name, "Labrador")

fun main() {
val json = """
{
"type": "dog",
"name": "Buddy",
"breed": "Labrador",
"color": "golden"
}
"""

val objectMapper = jacksonObjectMapper()
val animal: Animal = objectMapper.readValue(json)

println(animal.javaClass) // class com.example.Dog
println(animal.name) // Buddy
println((animal as Dog).breed) // Labrador
println((animal as? Labrador)?.color) // golden
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ule-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»