我在使用Kotlin在Micronaut中为MongoDB配置对象映射时遇到了一些困难。我遇到类似
的错误解码为“资产”失败,但存在以下异常:
找不到“资产”的公共构造函数。
可能需要显式配置和注册自定义编解码器或PojoCodec来处理这种类型。 org.bson.codecs.configuration.CodecConfigurationException:使用AutomaticPojoCodec解码时发生异常。 解码为“资产”失败,但有以下异常:
找不到“资产”的公共构造函数。
可能需要显式配置和注册自定义编解码器或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,但我不知道在该设置中要输入什么才能使其起作用。
感谢您的帮助!
答案 0 :(得分:1)
您可以简单地将编解码器注册表定义为Bean。由于您无法控制正在注册的课程,因此可以创建工厂
var is_valid = validate_text_field();
if( is_valid ){
return true;
}else{
return false;
}
应该执行上述操作
编辑:请注意,默认情况下添加了return validate_text_field();