我们正在尝试为Spring Data Mongo
设置自己的转换器,但遇到了问题。
[似乎像Spring从未在CustomConversions上调用registerConvertersIn
,因此通过重写AbstractMongoConfiguration#customConversions
添加的自定义转换器永远不会成为转换的一部分。
我们正在使用Spring Data Mongo 1.6.3,但似乎对于1.8.0也可能是个问题(我检查了对CustomConversions#registerConvertersIn
的调用,但没有找到。)
通过这样在自定义CustomConversions#registerConvertersIn
中调用MappingMongoConverter
,我能够解决此问题:
class MongoConfig extends AbstractMongoConfiguration {
@Bean
@Override
public MappingMongoConverter mappingMongoConverter() throws Exception {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext()) {
@Override
public void setCustomConversions(CustomConversions conversions) {
super.setCustomConversions(conversions);
conversions.registerConvertersIn(conversionService);
}
};
converter.setCustomConversions(customConversions());
return converter;
}
}
是错误还是我们做错了?
发现了另一种解决方法:https://stackoverflow.com/a/14369998/4567261
您是否用MongoConfig
注释了@Configuration
类?
您的MongoConfig类需要由Spring BeanFactory管理,以自动调用回调afterPropertiesSet()
(其中conversions.registerConvertersIn(conversionService)
最初称为))
如果不注释配置bean,则需要自己调用afterPropertiesSet()
对我来说什么都没有。在设置mongo模板时,我们需要告诉mongo db使用自定义转换。
在Spring Boot 2.x中,这就像创建一个注册所有转换器的注册bean一样简单: