在Spring Data Mongo中设置自定义转换器

问题描述 投票:2回答:3

我们正在尝试为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

java spring mongodb spring-data-mongodb mongodb-java
3个回答
2
投票

您是否用MongoConfig注释了@Configuration类?

您的MongoConfig类需要由Spring BeanFactory管理,以自动调用回调afterPropertiesSet()(其中conversions.registerConvertersIn(conversionService)最初称为))

如果不注释配置bean,则需要自己调用afterPropertiesSet()


5
投票

对我来说什么都没有。在设置mongo模板时,我们需要告诉mongo db使用自定义转换。


0
投票

在Spring Boot 2.x中,这就像创建一个注册所有转换器的注册bean一样简单:

© www.soinside.com 2019 - 2024. All rights reserved.