如何使用Micronaut和Kotlin+为MongoDB配置对象映射;克蒙戈?
我在Micronaut和Kotlin中为MongoDB配置对象映射时遇到一些困难。我遇到了如下错误: 解码为“资产”失败,出现以下异常: 找不到“资产”的公共构造函数 可能需要显式配置和注册自定义编解码器或PojoCodec以处理此类型。 org.bson.codecs.configuration.CodecConfigurationException:使用AutomaticPojoDec进行解码时发生异常。 解码为“资产”失败,出现以下异常: 找不到“资产”的公共构造函数 可能需要显式配置和注册自定义编解码器或PojoCodec以处理此类型 有了KMongo,这很容易。然而,Micronaut注入的MongoClient没有KMongo的编解码器注册表 我可以让它按如下方式工作:如何使用Micronaut和Kotlin+为MongoDB配置对象映射;克蒙戈?,mongodb,kotlin,micronaut,kmongo,Mongodb,Kotlin,Micronaut,Kmongo,我在Micronaut和Kotlin中为MongoDB配置对象映射时遇到一些困难。我遇到了如下错误: 解码为“资产”失败,出现以下异常: 找不到“资产”的公共构造函数 可能需要显式配置和注册自定义编解码器或PojoCodec以处理此类型。 org.bson.codecs.configuration.CodecConfigurationException:使用AutomaticPojoDec进行解码时发生异常。 解码为“资产”失败,出现以下异常: 找不到“资产”的公共构造函数 可能需要显式配置和注
val db: MongoDatabase by lazy {
val codecRegistry = ClassMappingType.codecRegistry(MongoClientSettings.getDefaultCodecRegistry())
client.getDatabase("db-name").withCodecRegistry(codecRegistry)
}
此代码直接取自KMongo。(顺便说一句,使用数据库。withKMongo()
会导致相同的错误)
虽然这是可行的,但我想让Micronaut使用KMongo创建客户机,或者让它使用上面的编解码器,使用配置(application.yml)
这里提到了一个编解码器注册表
设置:,但我不知道在该设置中输入什么才能使其正常工作
感谢您的帮助 您可以简单地将编解码器注册表定义为bean。由于您无法控制正在注册的类,因此可以创建工厂
@Factory
class KMongoFactory {
@Singleton
fun kCodecRegistry(): CodecRegistry {
return ClassMappingType.codecRegistry(MongoClientSettings.getDefaultCodecRegistry());
}
}
像上面这样的东西应该可以做到这一点
编辑:请注意,
MongoClients.getDefaultCodecRegistry()
是默认添加的您是否有机会在github上共享完整的示例(micronaut-kotlin-kmongo),这将非常有用!嗯,我没有关于它的框架项目,但我可以在Github上创建一个要点。。这会有帮助吗?Thant正是我所需要的。如何在Java中实现这一点?您能否共享gist url@JeroenKnoefIs?您是否有机会在github上共享micronaut-kotlin-kmongo的完整集成?那会有用的!