Spring Boot+MongoDB+Kotlin多态模型查询子类属性丢失问题
问题原因分析
1. Jackson类型映射的name与数据库存储的type值不匹配
你在@JsonSubTypes里给子类指定的name和数据库中实际存储的type值完全不一致:
- 代码中
B类对应的name是"test_a",但数据库里存的是"type a" - 代码中
C类对应的name是"test_b",但数据库里存的是"type b"
Jackson反序列化时,会通过type字段的值匹配@JsonSubTypes里的name,匹配不上就只能把对象反序列化为父类A,自然会丢失子类特有的value或values属性。
2. 可能缺少Spring Data MongoDB的多态支持注解
如果使用Spring Data MongoDB,仅靠Jackson的注解可能不够,还需要给子类添加@TypeAlias注解,明确指定和数据库type字段对应的别名,示例如下:
@TypeAlias("type a") data class B : A( val value: String? = null ) @TypeAlias("type b") data class C : A( val values: List<String>? = null )
同时要确保父类A被Spring Data MongoDB识别为多态基类,可添加@Document注解(如果该类对应MongoDB集合)。
3. 映射转换器配置问题
检查项目是否让Spring Data MongoDB正确使用Jackson进行反序列化,部分场景下Spring Data会默认使用自身的映射转换器,需要配置让它对齐Jackson的类型解析规则,确保类型识别逻辑一致。
内容的提问来源于stack exchange,提问作者Orelvis15
相关产品推荐
相关产品推荐

