Java 使用外部_属性的Jackson多态性不使用kotlin默认值
入站请求属于Java 使用外部_属性的Jackson多态性不使用kotlin默认值,java,spring,spring-boot,kotlin,jackson,Java,Spring,Spring Boot,Kotlin,Jackson,入站请求属于MyRequestBody类型,例如 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 entityTy
MyRequestBody
类型,例如
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
)
实体
也可能丢失
{
"entityType": "MY_Bacteria",
"entity": {
"speciesName": "E. Coli"
}
}
我希望在MyRequestBody
的entity
字段上具有多态性。类型由同级字段entityType
给出,可以是“我的细菌”或“我的疾病”,分别映射到细菌
和疾病
类
这个解决方案似乎不起作用。当请求正文中缺少
实体
(它没有使用默认值null)时,我不断收到一个400,其中包含消息“未能读取HTTP消息”。您的请求中是否将实体类型
设置为我的疾病
或我的细菌
?您可以发布您的请求JSON吗?^更新了postcan您可以尝试更新到属性吗?i、 einclude=JsonTypeInfo.As.PROPERTY
Yeah就是这样工作的(当JSON中缺少属性时使用默认值),但不适用于JsonTypeInfo.As.EXTERNAL_属性。奇怪。在这里打开了一个问题您的请求中是否将entityType
设置为MY_Disease
或MY_Bacteria
?您可以发布您的请求JSON吗?^更新了postcan您可以尝试更新到属性吗?i、 einclude=JsonTypeInfo.As.PROPERTY
Yeah就是这样工作的(当JSON中缺少属性时使用默认值),但不适用于JsonTypeInfo.As.EXTERNAL_属性。奇怪,这里有个问题
{
"entityType": "MY_Disease"
}