如何在不破坏自动配置的情况下自定义Spring-Boot中的MappingMongoConverter(setMapKeyDotReplacement)?

Mik*_*din 14 spring-data spring-data-mongodb spring-boot

如何MappingMongoConverter在不更改由spring-data自动配置的任何mongo-stuff的情况下自定义Spring-Boot-Application(1.3.2.RELEASE)中的内容?

我目前的解决方案是:

@Configuration
public class MongoConfig {

  @Autowired
  private MongoDbFactory mongoFactory;

  @Autowired
  private MongoMappingContext mongoMappingContext;

  @Bean
  public MappingMongoConverter mongoConverter() throws Exception {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
    //this is my customization
    mongoConverter.setMapKeyDotReplacement("_");
    mongoConverter.afterPropertiesSet();
    return mongoConverter;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方式还是我打破了一些东西?
或者是否有更简单的方法来设置mapKeyDotReplacement?

And*_*son 8

这是正确的方法.自动配置MappingMongoConverter使用注释@ConditionalOnMissingBean(MongoConverter.class),因此添加自己的MappingMongoConverterbean将导致自动配置退出,以支持您的自定义转换器.

一个小的修正:你没有必要打电话mongoConverter.afterPropertiesSet().容器会为您调用它.


Dav*_*ngs 8

我在最新版本的spring boot中遇到过这个问题.你的方法不适合我或接受的答案...我的启动应用似乎忽略了我的自定义映射转换器.

那么我在配置类中做了什么我在启动时使用的MappingMongoConverter中自动装配,然后在其上设置setMapKeyDotReplacement.

@Autowired
private MappingMongoConverter mongoConverter;

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


ZZ *_*Z 5 5

还有更短的版本:

@Autowired
void setMapKeyDotReplacement(MappingMongoConverter mappingMongoConverter) {
    mappingMongoConverter.setMapKeyDotReplacement("_");
}
Run Code Online (Sandbox Code Playgroud)

记住将其放入Spring会意识到的类中-例如,用注释的类 @Configuration