我在使用Kotlin的Micronaut框架配置MongoDB的对象映射时遇到了一些困难。我收到了以下错误:
解码为“Asset”时失败,出现以下异常:
找不到“Asset”的公共构造函数。
可能需要显式配置和注册自定义编解码器或PojoCodec来处理此类型。org.bson.codecs.configuration.CodecConfigurationException: 使用AutomaticPojoCodec进行解码时发生异常。 解码为“Asset”时失败,出现以下异常:
找不到“Asset”的公共构造函数。
可能需要显式配置和注册自定义编解码器或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,但我不知道在那个设置中输入什么才能使其正常工作。
非常感谢您的帮助!