我在使用 Kotlin 在 Micronaut 中为 MongoDB 配置对象映射时遇到了一些困难。我收到如下错误:
解码为“资产”失败,但出现以下异常:
找不到“资产”的公共构造函数。
可能需要显式配置和注册自定义 Codec 或 PojoCodec 以处理此类型。org.bson.codecs.configuration.CodecConfigurationException:使用 AutomaticPojoCodec 解码时发生异常。解码为“资产”失败,但出现以下异常:
找不到“资产”的公共构造函数。
可能需要显式配置和注册自定义 Codec 或 PojoCodec 以处理此类型。
使用 KMongo,这很容易。但是 Micronaut 注入的 MongoClient 没有 KMongo 的编解码器注册表。
我可以让它工作如下:
val db: MongoDatabase by lazy {
val codecRegistry = ClassMappingType.codecRegistry(MongoClientSettings.getDefaultCodecRegistry())
client.getDatabase("db-name").withCodecRegistry(codecRegistry)
}
此代码直接取自 KMongo。(顺便说一句,使用database.withKMongo()
导致相同的错误)
虽然这可行,但我想让 Micronaut 使用 KMongo 创建客户端,或者让它使用上面的编解码器,使用配置(application.yml)。
codec-registry
这里提到了一个设置: https ://micronaut-projects.github.io/micronaut-mongodb/latest/guide/configurationreference.html ,但我不知道在该设置中输入什么才能使其工作。
任何帮助表示赞赏!