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).