registerBsonModule
Register a jackson JacksonModule for the two bson mappers, bsonMapper and bsonMapperCopy.
The Jackson mappers are immutable: this function replaces them. Call it before creating the client, the existing codecs keep the previous mappers.
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.nextStringValue()
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 : ValueDeserializerModifier() {
override fun modifyDeserializer(config: DeserializationConfig, beanDesc: BeanDescription.Supplier, deserializer: ValueDeserializer<*>): ValueDeserializer<*> {
return if(deserializer is BeanDeserializer) {
KMongoBeanDeserializer( deserializer)
} else {
deserializer
}
}
}
KMongoConfiguration.registerBsonModule(SimpleModule().setDeserializerModifier(KMongoBeanDeserializerModifier()))Content copied to clipboard