【问题标题】:Spring not using mongo custom convertersSpring不使用mongo自定义转换器
【发布时间】:2013-02-18 06:54:06
【问题描述】:

我一直在尝试注册自己的编写自定义转换器来更改默认 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 并且它工作正常。但仍然想知道这里发生了什么?

【问题讨论】:

  • 您能说明一下您是如何实际保存这些对象的吗?我的意思是,为什么需要将 POJO 转换为实际的 BSON 才能将其保存到 DB?
  • 我需要将所有存储库中的默认对象 ID 更改为一些自定义 ID(UUID + 随机键)。这就是我尝试使用 mongo 转换器的原因。
  • Rajith,在 mongodb 中,您不允许更新 _id 字段。如果您想添加带有自定义 _id 的新对象,您应该在需要的字段中提供 @Id 注释,并在插入对象时手动设置 _id。
  • 为我工作 - 我放了 @Component 标签,现在 Spring 使用我的转换器

标签: java spring spring-mongo


【解决方案1】:

@Configuration 定义了一个 Spring 上下文片段,其中包含如果使用 @Bean 注释的方法,则返回新的 bean 并将它们放入上下文中。

@Component 是“这个 Pojo 是 Spring bean”的一种说法。然后,您需要一个 @ComponentScan 注释或等效的 XML 来扫描包中的 @Component 注释 bean。

因此,在您的情况下,您创建了转换器,但在您添加 @Component 之前它没有注册为 Spring bean,因此它最初无法正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-16
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多