春天不使用蒙戈定制的转换器(Spring not using mongo custom conver

2019-07-20 01:43发布

我一直在尝试注册我自己写的自定义转换器更改默认的ID值。 但它从来没有真正调用。 这里是我的自定义转换器

public class EventKeyConverter implements Converter<Event,DBObject> {

    @Override
    public DBObject convert(Event object) {
        DBObject dbObject = DBObjectTransformer.toDBObject(object);
        dbObject.put("_id", KeyGenerator.getRandomKey());
        return dbObject;
    }

}

这里要说的是我没有注册用户转换的地方

@Override
@Bean
public CustomConversions customConversions() {
    List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
    converters.add(new EventKeyConverter());
    return new CustomConversions(converters);
}

@Override
@Bean
public MappingMongoConverter mappingMongoConverter() throws Exception {
    MappingMongoConverter converter = new MappingMongoConverter(
            eventsMongoDbFactory(), mongoMappingContext());
    converter.setCustomConversions(customConversions());
    return converter;
}

@Bean
public MongoTemplate eventsMongoTemplate() throws Exception {
    final MongoTemplate template = new MongoTemplate(
            eventsMongoDbFactory(), mappingMongoConverter());
    template.setWriteResultChecking(WriteResultChecking.EXCEPTION);

    return template;
}

当我节省一些对象该转换器不会被调用。


编辑1:我需要更改默认的对象ID到所有存储库一些自定义的ID(UUID +随机密钥)。 这就是为什么我试图使用蒙戈转换器。

编辑2:刚刚发现的问题。 更改@Configuration在包含customConversion()类@Component并能正常工作。 但是,仍然不知道这到底是怎么回事?

Answer 1:

@Configuration定义包含方法,如果标注了一个Spring上下文片段@Bean返回新豆,放在上下文。

@Component是说:“这是POJO的一个Spring bean”的一种方式。 那么你需要一个@ComponentScan注解或XML相当于扫描包@Component注解的bean。

所以你的情况,你所创建转换很好,但直到你加入它没有注册为一个Spring bean @Component ,所以最初没有工作。



文章来源: Spring not using mongo custom converters