Полиморфизм Джексона с использованием EXTERNAL_PROPERTY не работает со значением по умолчанию kotlin - PullRequest
1 голос
/ 23 июня 2019
sealed class Entity
data class Bacteria(val speciesName: String): Entity()
data class Disease(val diseaseId: Long): Entity()

enum class EntityType {
    MY_Bacteria,
    MY_Disease
}

data class MyRequestBody(
  val entityType: EntityType,
  @JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
        property = "entityType",
        defaultImpl = NoClass::class,
        visible = true
  )
  @JsonSubTypes(
        JsonSubTypes.Type(value = Disease::class, name = "MY_Disease"),
        JsonSubTypes.Type(value = Bacteria::class, name = "MY_Bacteria")
  )
  val entity: Entity? = null
)

Входящие запросы имеют тип MyRequestBody например,

{
  "entityType": "MY_Bacteria",
  "entity": {
    "speciesName": "E. Coli"
  }
}

entity также могут отсутствовать

{
  "entityType": "MY_Disease"
}

Я хотел бы иметь полиморфизм наentity поле MyRequestBody.Тип задается родственным полем, entityType, которое может быть "MY_Bacteria" или "MY_Disease", которые соответствуют классам Bacteria и Disease соответственно.

Это решение, похоже, не работает,Я продолжаю получать 400 с сообщением «Не удалось прочитать HTTP-сообщение», когда entity отсутствует в теле запроса (не используется значение по умолчанию null).

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