Raj*_*tha 6 java spring spring-mongo
我一直在尝试注册我自己的写自定义转换器来更改默认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;
}
}
Run Code Online (Sandbox Code Playgroud)
这里是我注册客户转换器的地方
@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;
}
Run Code Online (Sandbox Code Playgroud)
当我保存一些对象时,这个转换器永远不会被调用.
编辑1:我需要将默认对象Id更改为所有存储库中的某个自定义ID(UUID +随机密钥).这就是我尝试使用mongo转换器的原因.
编辑2: 刚发现问题.在包含customConversion()的类中将@Configuration更改为@Component,它可以正常工作.但还是想知道这里发生了什么?
@Configuration定义了一个 Spring 上下文片段,其中包含一些方法,如果使用这些方法进行注释@Bean,则返回新的 bean 并将它们放入上下文中。
@Component是“这个 Pojo 是 Spring bean”的一种说法。然后,您需要一个@ComponentScan注释或等效的 XML 来扫描包以@Component查找带注释的 bean。
因此,在您的情况下,您可以很好地创建转换器,但在添加 之前它没有注册为 Spring bean @Component,因此它最初不起作用。
| 归档时间: |
|
| 查看次数: |
4377 次 |
| 最近记录: |