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
相关产品推荐
相关产品推荐

