Spring Boot中Jackson反序列化:能否实例化父类User?
解决方案:Jackson反序列化实例化通用User类
你的问题核心在于当前的Jackson类型识别配置只覆盖了Student和Supervisor子类,未对父类User本身做映射,也没指定默认实现类,导致无法直接反序列化为User。可以通过以下修改实现需求:
修改User类的Jackson注解
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "role", visible = false, defaultImpl = User.class // 新增:指定无法匹配子类时的默认实现 ) @JsonSubTypes({ @JsonSubTypes.Type(value = Student.class, name = "STUDENT"), @JsonSubTypes.Type(value = Supervisor.class, name = "SUPERVISOR"), @JsonSubTypes.Type(value = User.class, name = "USER") // 新增:为User本身添加类型映射 }) public class User { // 原有属性与方法 }
配置说明
defaultImpl = User.class:当传入的JSON中没有role字段,或者role值不在STUDENT/SUPERVISOR范围内时,Jackson会自动实例化通用的User类,正好匹配你"先创建通用用户、后续再确定具体类型"的业务场景。- 添加
@JsonSubTypes.Type(value = User.class, name = "USER"):如果后续需要主动通过role: "USER"标识来反序列化为User,该配置也能生效。
测试场景验证
- 无
role字段的JSON:
会被反序列化为User实例。{"email": "temp@example.com", "username": "temp_user"} - 带
role: "USER"的JSON:
同样会被反序列化为User实例。{"role": "USER", "email": "temp@example.com", "username": "temp_user"}
内容的提问来源于stack exchange,提问作者fipps omat
相关产品推荐
相关产品推荐

