JSON反序列化为指定MyUser类报错:类型ID缺失异常如何解决?
问题原因
MyUser继承了User类,而User类上标注的@JsonTypeInfo注解会被所有子类继承。这意味着Jackson在反序列化MyUser对象时,会默认遵循User类的配置要求,必须找到type属性确认子类型——哪怕你在Request里明确声明了是List<MyUser>,Jackson依然会执行这个类型检查,而你的JSON数据里缺少type字段,因此抛出异常。
解决方案
提供三种可行的解决方式,可根据需求选择:
1. 给MyUser类添加注解,忽略类型ID检查
直接在MyUser类上标注@JsonTypeInfo(use = JsonTypeInfo.Id.NONE),覆盖父类的类型检查配置,Jackson反序列化MyUser时就不会再要求type字段:
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE) public class MyUser extends User { // 原有属性和方法 }
2. 在Request的users字段上指定反序列化规则
如果不想修改MyUser类,可给Request中的users字段添加@JsonDeserialize(contentAs = MyUser.class),同时结合@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)覆盖该字段的类型检查逻辑:
public class Request { @JsonDeserialize(contentAs = MyUser.class) @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) List<MyUser> users; }
3. 修改JSON数据,添加类型ID字段
如果允许调整JSON格式,给users数组中的每个对象添加type字段,对应MyUser在@JsonSubTypes中配置的名称myUser:
{ "users": [{ "type": "myUser", "name": "John" }] }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

