java - 在 scala 中组合 mongodb 编解码器注册表

标签 java mongodb scala scala-macros

我有两个用于一组案例类的 CodecRegistry 实现。它们大多数是用宏创建的。现在,如果我仅使用 RegistryOne,它适用于集合“One” - 包 one 中的类。

object RegistryOne {
  lazy val registry: CodecRegistry =
    fromRegistries(
      fromCodecs(..),
      fromProviders(..),
      DEFAULT_CODEC_REGISTRY
    )
}

object RegistryTwo {
  lazy val registry: CodecRegistry =
    fromRegistries(
      fromCodecs(..),
      fromProviders(..),
      RegistryOne.registry,
      DEFAULT_CODEC_REGISTRY
    )
}

RegistryTwo 中实现的一些类依赖于包 one。所以我只是将 RegistryOne 添加到其中。现在,所有序列化仍然适用于设置“One”的 RegistryTwo.registry。但是对于包 two 的类,我收到运行时异常“找不到类 scala.Option 的编解码器”。似乎 DEFAULT_CODEC_REGISTRY 未包含在结果注册表中?!

我还有 RegistryThreeRegistryFour。至少为了清楚起见和将来的重构,我会将它们分开保存。

如何正确组合编解码器注册表?

最佳答案

事实证明错误消息具有误导性。 ADT 主类的宏还为每个子类创建编解码器。如果您还为其中之一添加了宏创建的编解码器,那么注册表会变得困惑,并且无法反序列化诸如 scala.Option 这样的原始内容。

关于java - 在 scala 中组合 mongodb 编解码器注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551846/

相关文章:

java - 我如何在 GAE 访问 Gmail?

java - Spring 启动 MVC。传递空请求正文

java - 必须发出 STARTTLS 命令

scala - 非持久化 RDD 如何导致 RPC 超时?

function - 哪些功能被认为是“可组合的”?

java - 不重用PreparedStatements 时的性能影响?

Mongodb - 根据其他字段值添加额外字段

php - Mongodb 安装不使用 PHP

javascript - 无法让 populate() 填充 Mongoose 中的数组

Scala:为什么函数前面需要类型变量?