Deserialize subclasses with Jackson by parent class field value

Fairy :

I have a parent class:

open class NetworkMessage(var type: NetworkMessageType)

and a bunch of it's subclasses, like

class ConnectionAcceptedResponseMessage(
    val accepted: Boolean,
    val uid: String
) : NetworkMessage(NetworkMessageType.CONNECTION_ACCEPTED)

so every message type is clearly determined by parent class field value. Is there any way to deserialize concrete subclass using only annotations and without using treeNode?

Puce :

In Java, you can do something like this on the parent class:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.EXISTING_PROPERTY,
    property = "type"
)
@JsonSubTypes({
        @JsonSubTypes.Type(value = ConnectionAcceptedResponseMessage.class, name = "CONNECTION_ACCEPTED"),
        @JsonSubTypes.Type(value = OtherResponseMessage.class, name = "OTHER")
})

I guess in Kotlin this will be similar.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=420835&siteId=1