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

POST接口接收ClassB时Jackson Databind类型ID缺失错误排查

解决Jackson Databind多态反序列化错误的方案

问题核心分析

错误提示missing type id property 'type'指向根对象ClassB,而非其集合属性myList内的元素。原因是父类ClassA的@JsonTypeInfo注解会被子类继承,导致Jackson在反序列化根对象ClassB时,也期望找到type属性来识别类型——但你的接口参数已经明确是ClassB,完全不需要多态识别逻辑。

具体修复步骤

1. 覆盖子类的类型识别配置

在ClassB上添加@JsonTypeInfo(use = JsonTypeInfo.Id.NONE),明确告诉Jackson该类作为根对象时无需类型识别:

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@JsonTypeName("classb")
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE) // 新增注解覆盖父类配置
public class ClassB extends ClassA implements Serializable {
  ...
  private Collection<ClassA> myList;
  ...
}

2. 兼容Lombok Builder与Jackson(可选但推荐)

如果使用Lombok的@Builder,建议添加@Jacksonized注解(Lombok 1.18.16及以上版本支持),确保Jackson能正确处理Builder生成的类结构:

@Builder
@Jacksonized // 新增注解
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@JsonTypeName("classb")
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
public class ClassB extends ClassA implements Serializable {
  ...
  private Collection<ClassA> myList;
  ...
}

3. 调整请求格式(备选方案)

若不想修改代码,也可以在请求的根对象中添加type属性,匹配ClassB的@JsonTypeName配置:

{
  "type": "classb", // 新增根对象的type字段
  ...
  "myList" : [ {
    "type" : "classb",
    ...
  }, {
    "type" : "classb",
    ...
  } ],
  "user" : null
}

额外检查项

  • 执行mvn dependency:tree排查pom.xml中是否存在隐性的jsonb依赖冲突
  • 确保Quarkus版本与quarkus-resteasy-jackson依赖的Jackson版本兼容(无需手动指定Jackson版本,依赖会自动匹配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:41:06