spring data mongodb:从自定义转换器中访问默认的POJO转换器

ash*_*osh 13 spring spring-data spring-data-mongodb

我通过xml设置spring数据mongo自定义转换器,如下所示

<mongo:mapping-converter id="mongoConverter" db-factory-ref="mongoDbFactory">
    <mongo:custom-converters>
        <mongo:converter ref="customWriteConverter" />
        <mongo:converter ref="customReadConverter" />
    </mongo:custom-converters>
</mongo:mapping-converter>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg ref="mongoConverter"/>
</bean>

<bean id="customWriteConverter" class="package.WriteConverter" />
<bean id="customReadConverter" class="package.ReadConverter" />
Run Code Online (Sandbox Code Playgroud)

在自定义读/写转换器中,我想重新使用spring-data-mongo的默认pojo转换器将某些属性保存为子文档.

考虑一个简化的例子 -

class A {
    B b;
    String var1;
    int var2;
}

class B {
    String var3;
    String var4;
}
Run Code Online (Sandbox Code Playgroud)

我想使用customWriteConverter和处理A类的转换customReadConverter,但在我的自定义转换器中,我还想将B类的转换委托给spring-data-mongo的默认POJO转换器.

我怎样才能做到这一点?我无法成功将MongoConverter或MongoTemplate自动装入自定义转换器,因为MongoConverter/MongoTemplate bean在尝试创建自定义转换器时正在进行中.是否可以访问默认转换器并在自定义转换器中使用它?

Har*_*dar 5

MongoTemplate类中使用此方法来获取默认转换器。

private static final MongoConverter getDefaultMongoConverter(MongoDbFactory factory) {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
    MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext());
    converter.afterPropertiesSet();
    return converter;
}
Run Code Online (Sandbox Code Playgroud)

MappingMongoConverter不是最终的,因此可以为特定目的覆盖。正如我在上面的评论中提到的,查看这个问题也许可以找到解决您问题的方法。

  • 如果我理解正确,我应该从我的自定义转换器调用这个静态方法。但是我如何从我的自定义转换器中获取一个 MongoDbFactory 以将它传递给这个静态方法? (2认同)