How to customize MappingMongoConverter (setMapKeyDotReplacement) in Spring-Boot without breaking the auto-configuration?

That's the right way to do it. The auto-configured MappingMongoConverter is annotated with @ConditionalOnMissingBean(MongoConverter.class), so adding your own MappingMongoConverter bean will cause the auto-configuration to back off in favour of your custom converter.

One minor correction: there's no need for you to call mongoConverter.afterPropertiesSet(). The container will call that for you.


I have run into this issue in the latest version of spring boot. Your approach did not work for me or the accepted answer...my boot app seemed to ignore my custom mapping converter.

So what I did in the config class I autowired in the MappingMongoConverter that boot uses and then set the setMapKeyDotReplacement on that.

@Autowired
private MappingMongoConverter mongoConverter;

// Converts . into a mongo friendly char
@PostConstruct
public void setUpMongoEscapeCharacterConversion() {
    mongoConverter.setMapKeyDotReplacement("_");
}

Also there's shorter version:

@Autowired
void setMapKeyDotReplacement(MappingMongoConverter mappingMongoConverter) {
    mappingMongoConverter.setMapKeyDotReplacement("_");
}

Remember to put it into class that Spring will be aware of - e.g. class annotated with @Configuration