Mongodb 为嵌套案例类自动创建mongo编解码器

Mongodb 为嵌套案例类自动创建mongo编解码器,mongodb,scala,mongo-scala-driver,Mongodb,Scala,Mongo Scala Driver,我想为嵌套的case类自动创建mongo编解码器,这些类很大,并且有很多层次的组成 作为一个简单的示例,假设我想为以下类创建编解码器: case class Person(name: String, address: Address, birthDate: Date) case class Address(country: String, city: String, streetAddress: String) 使用createCodecProvider时: private val c

我想为嵌套的case类自动创建mongo编解码器,这些类很大,并且有很多层次的组成

作为一个简单的示例,假设我想为以下类创建编解码器:

case class Person(name: String, address: Address, birthDate: Date)
case class Address(country: String, city: String, streetAddress: String)
使用createCodecProvider时:

    private val customCodecs = Macros.createCodecProvider[Person]()

    private val javaCodecs = CodecRegistries.fromCodecs(
        new DateCodec())

    private val codecRegistry = fromRegistries(fromProviders(customCodecs),
        javaCodecs,
        DEFAULT_CODEC_REGISTRY)
我得到了一个错误:

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class io.equalum.server.alert.Address.

以下方法确实有效:

    private val customCodecs = fromProviders(classOf[Person], classOf[Address])

    private val javaCodecs = CodecRegistries.fromCodecs(
        new DateCodec())

    private val codecRegistry = fromRegistries(customCodecs,
        javaCodecs,
        DEFAULT_CODEC_REGISTRY)

但是,当然,对于大型案例类来说,这将很难编写和维护。

嗯。。。这正是你必须要做的。您必须使用编解码器注册表重新注册每个案例类。没有其他方法可以解决这个问题。您还可以了解如何在ReactiveMongo中处理此类案件。