You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Jackson多态反序列化报错‘missing type id property 'type' (for POJO property 'data')’求助

解决Jackson多态反序列化"missing type id property 'type'"错误

我完全理解你折腾了这么久都没解决的挫败感,咱们直接揪出问题核心,一步步修复:

核心问题分析

你的代码里有两个关键错误,直接导致了这个报错:

  1. 子类里错误的@JsonProperty("type")注解,破坏了Jackson的多态类型识别逻辑
  2. 可能忽略了data对象必须包含类型标识字段的要求

修复步骤

1. 修正子类的注解错误

你在UpdateNetworkConfigurationsExecutionData里给两个字段都加了@JsonProperty("type"),这完全是错误的——这会让Jackson把两个字段都映射到JSON里的type属性,不仅会导致数据混乱,还直接覆盖了父类ExecutionData用来区分子类的类型ID字段,这就是报错的主要原因。

把错误注解删掉,让字段名和JSON对应字段保持一致:

@JsonIgnoreProperties(ignoreUnknown = true)
data class UpdateNetworkConfigurationsExecutionData(
    val updatedProfiles: List<UpdateSalesChannelProfileViewModel>,
    val zoning: List<SoftZoningConfig>
) : ExecutionData()

2. 确保父类的多态配置完整

后续添加新的ExecutionData子类时,必须在父类的@JsonSubTypes里注册对应的类型,比如添加SomeOtherConfigurationUpdateExecutionData后:

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes(
    Type(value = UpdateNetworkConfigurationsExecutionData::class, name = "UpdateNetworkConfigurationsExecutionData"),
    Type(value = SomeOtherConfigurationUpdateExecutionData::class, name = "SomeOtherConfigurationUpdateExecutionData")
)
sealed class ExecutionData

3. 验证传入的JSON结构

你的响应JSON必须符合以下格式,尤其是data对象里的type字段不能少,这个字段是Jackson识别子类的关键:

{
  "type": "你的ChangeRequestType枚举值",
  "data": {
    "type": "UpdateNetworkConfigurationsExecutionData",
    "updatedProfiles": [...],
    "zoning": [...]
  }
}

4. 检查枚举的序列化配置

确保ChangeRequestType枚举能被Jackson正确序列化/反序列化,如果枚举值和JSON字符串不匹配,可以给枚举添加@JsonValue或者@JsonProperty指定映射关系。

为什么之前的尝试都失败?

你之前的子类注解错误直接破坏了Jackson的多态识别逻辑,它找不到用来区分子类的type属性(被错误映射覆盖了),所以无论调整其他配置,核心问题没解决就会一直报错。

内容的提问来源于stack exchange,提问作者shidoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:07:27