Десериализовать подклассы с Джексоном по значению поля родительского класса - PullRequest
1 голос
/ 19 февраля 2020

У меня есть родительский класс:

open class NetworkMessage(var type: NetworkMessageType)

и несколько его подклассов, например

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

, поэтому каждый тип сообщения четко определяется значением поля родительского класса. Есть ли способ десериализации конкретного подкласса, используя только аннотации и не используя treeNode?

1 Ответ

2 голосов
/ 19 февраля 2020

В Java вы можете сделать что-то подобное в родительском классе:

@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")
})

Я думаю, в Kotlin это будет похоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...