Spring-Dataによって自動構成されたmongo-stuffを変更せずに、Spring-Boot-Application(1.3.2.RELEASE)内で MappingMongoConverter
をカスタマイズするにはどうすればよいですか?
私の現在の解決策は次のとおりです。
@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;
}
}
これは正しい方法ですか、それとも私はこれでいくつかのものを壊しますか?
または、mapKeyDotReplacementを設定するさらに簡単な方法はありますか?
それが正しい方法です。自動構成されたMappingMongoConverter
には@ConditionalOnMissingBean(MongoConverter.class)
の注釈が付けられているため、独自のMappingMongoConverter
Beanを追加すると、自動構成がバックオフされ、カスタムコンバーターが優先されます。
マイナーな修正が1つあります。mongoConverter.afterPropertiesSet()
を呼び出す必要はありません。コンテナがそれを呼び出します。
SpringBootの最新バージョンでこの問題が発生しました。あなたのアプローチは私または受け入れられた答えのために機能しませんでした...私のブートアプリは私のカスタムマッピングコンバーターを無視しているようでした。
したがって、ブートが使用するMappingMongoConverterで自動配線した構成クラスで行ったことを実行し、その上にsetMapKeyDotReplacementを設定しました。
@Autowired
private MappingMongoConverter mongoConverter;
// Converts . into a mongo friendly char
@PostConstruct
public void setUpMongoEscapeCharacterConversion() {
mongoConverter.setMapKeyDotReplacement("_");
}
また、より短いバージョンがあります:
@Autowired
void setMapKeyDotReplacement(MappingMongoConverter mappingMongoConverter) {
mappingMongoConverter.setMapKeyDotReplacement("_");
}
Springが認識しているクラスに入れることを忘れないでください-例: @Configuration
で注釈が付けられたクラス