java - 在scala中结合mongodb编解码器注册表
问题描述
对于一组案例类,我有两个 CodecRegistry 实现。它们中的大多数是用宏创建的。现在,如果我使用RegistryOne
唯一的,它适用于 set "One" - 来自 package 的类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
取决于 package one
。所以我只是将其包含在RegistryOne
其中。现在所有序列化仍然适用RegistryTwo.registry
于 set "One"。但是对于包的类,two
我得到一个运行时异常“找不到类 scala.Option 的编解码器”。似乎DEFAULT_CODEC_REGISTRY
没有包含在结果注册表中?!
我也有RegistryThree
和RegistryFour
。至少为了清楚起见和未来的重构,我会将它们分开保存。
如何正确组合编解码器注册表?
解决方案
原来错误消息具有误导性。ADT 主类的宏还为每个子类创建编解码器。如果您还为其中一个添加了宏创建的编解码器,那么注册表会混淆并且无法反序列化原始内容,例如scala.Option
.
推荐阅读
- elasticsearch - Logstash REST 过滤器 - 限制速度
- java - android-text 视图中的字母空间
- bash - 如何在文件bash中循环打开和结束字符串?
- terraform - 使用 Terraform 创建 azurerm_virtual_machine 资源时,有什么方法可以避免 storage_os_disk 继承标签?
- ms-access - 访问 - 字段验证规则 - 限制为 1 种语言
- java - NoClassDefFoundError:Maven 模块间依赖
- vbscript - 任务计划程序问题 - 无论用户是否登录都运行不工作
- c++ - QLabel 变成黑色而不是透明
- angular6 - 角度项目中的嵌套组件调用?
- excel - 是否有另一种方法可以在 VBA 中第二次出现 dateTime?