有一个名为Product
的Mongo文档,一个产品有许多ProductOption,选项的类型从1到5。属性类型因其选项类型而异(示例如下)。
我想做的是定义下面的QuestionThisType
。你能给我推荐一下吗?
@Document("Product")
data class Product(
val id: Int,
val options: List<ProductOption>,
) {
data class ProductOption(
val type: Int,
val properties: QuestionThisType
)
}
如果类型== 1,则
data class Property1(
val one: String
)
如果类型== 2,则
data class Property2(
val a: String,
val b: String,
)
...
1条答案
按热度按时间58wvjzkj1#
这可能对您有用-创建您自己的Spring Data 转换器
首先,想象一种 * 通用 * 的方法,将
ProductOption
的数据存储在Mongo可以表示的数据类型中,例如Map<String,Any>
包含嵌套的Map<String,Any>
。现在,您需要一个接口将类型1、2、3、4、5的实际ProductOptions链接在一起,然后为每个类型链接具体的类
然后,您需要创建一个转换器,它接受这些实现
ProductOption
的具体类,并将它们与存储在Mongo中的内容进行转换:ProductOptionGeneral
最后注册您的转换器
(If你曾经问过如何将JSON反序列化处理成一个多态类结构,这可以用一种简单得多的方式实现。这对你来说可能是一种完全不同的方法。你可以从Mongo中检索数据作为一个BSON对象,转换成JSON,然后按照我在Stackoverflow Answer中描述的方式使用Jackson的ObjectMapper:https://stackoverflow.com/a/72106352/1847378)