我一直在尝试注册自己的自定义转换器以更改默认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 +随机密钥)。这就是我尝试使用mongo转换器的原因。
编辑2: 刚刚发现了这个问题。在包含customConversion()的类中将@Configuration更改为@Component,它可以正常工作。但还是想知道这里发生了什么?
答案 0 :(得分:2)
@Configuration
定义了一个Spring上下文片段,其中包含如果使用@Bean
注释返回新bean并将它们放在上下文中的方法。
@Component
是一种说法&#34;这个Pojo是一个Spring bean&#34;。然后,您需要@ComponentScan
注释或XML等效项来扫描@Component
带注释的bean的包。
所以在你的情况下,你创建转换器很好,但是在你添加@Component
之前它没有被注册为Spring bean,所以它最初没有工作。