大きく、多くのレベルの構成を持つネストされたケースクラスの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)
しかしもちろん、大規模なケース クラスの場合、これを記述して保守するのは非常に困難です。