kmongo / org.litote.kmongo.util / KMongoConfiguration / registerBsonModule

registerBsonModule

fun registerBsonModule(module: Module): Unit (source)

Register a jackson Module for the two bson mappers, bsonMapper and bsonMapperCopy.

For example, if you need to manage DBRefs autoloading, you can write this kind of module:

    class KMongoBeanDeserializer(deserializer:BeanDeserializer) : ThrowableDeserializer(deserializer) {

            override fun deserializeFromObject(jp: JsonParser, ctxt: DeserializationContext): Any? {
                 if(jp.currentName == "\$ref") {
                     val ref = jp.nextTextValue()
                     jp.nextValue()
                     val id = jp.getValueAsString()
                     while(jp.currentToken != JsonToken.END_OBJECT) jp.nextToken()
                     return database.getCollection(ref).withDocumentClass(_beanType.rawClass).findOneById(id)
                  } else {
                     return super.deserializeFromObject(jp, ctxt)
                  }
                 }
             }

     class KMongoBeanDeserializerModifier : BeanDeserializerModifier() {

            override fun modifyDeserializer(config: DeserializationConfig, beanDesc: BeanDescription, deserializer: JsonDeserializer<*>): JsonDeserializer<*> {
                return if(deserializer is BeanDeserializer) {
                        KMongoBeanDeserializer( deserializer)
                       } else {
                        deserializer
                       }
                }
            }

     KMongoConfiguration.registerBsonModule(SimpleModule().setDeserializerModifier(KMongoBeanDeserializerModifier()))