如何使用Micronaut和Kotlin + KMongo为MongoDB配置对象映射?

时间:2019-02-15 17:11:27

标签: mongodb kotlin micronaut kmongo

我在使用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,但我不知道在该设置中要输入什么才能使其起作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以简单地将编解码器注册表定义为Bean。由于您无法控制正在注册的课程,因此可以创建工厂

var is_valid = validate_text_field();
  if( is_valid ){
     return true;
  }else{
     return false;
  }

应该执行上述操作

编辑:请注意,默认情况下添加了return validate_text_field();