gpt4 book ai didi

java - 在 Spring Data Mongo 中设置自定义转换器

转载 作者:行者123 更新时间:2023-12-03 00:49:32 25 4
gpt4 key购买 nike

我们正在尝试为 Spring Data Mongo 设置我们自己的转换器,但遇到了问题。

似乎 Spring 从未在 CustomConversions 上调用 registerConvertersIn,因此我们通过重写 AbstractMongoConfiguration#customConversions 添加的自定义转换器永远不会成为转换的一部分。

我们正在使用 Spring Data Mongo 1.6.3,但 1.8.0 似乎也可能存在问题(我检查了对 CustomConversions#registerConvertersIn 的调用,但没有发现任何问题。)

我能够通过在自定义 MappingMongoConverter 中调用 CustomConversions#registerConvertersIn 来解决此问题,如下所示:

class MongoConfig extends AbstractMongoConfiguration {
@Bean
@Override
public MappingMongoConverter mappingMongoConverter() throws Exception {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext()) {
@Override
public void setCustomConversions(CustomConversions conversions) {
super.setCustomConversions(conversions);
conversions.registerConvertersIn(conversionService);
}

};
converter.setCustomConversions(customConversions());
return converter;
}
}

这是一个错误还是我们做错了什么?

找到了另一个解决方法: https://stackoverflow.com/a/14369998/4567261

最佳答案

在 Spring Boot 2.x 中,就像创建一个注册所有转换器的注册 bean 一样简单:

@Configuration
public class Converters {

@Bean
public MongoCustomConversions mongoCustomConversions() {

return new MongoCustomConversions(
Arrays.asList(
new MyClassToBytesConverter(),
new BytesToMyClassConverter()));
}
}

然后创建转换器类:

@WritingConverter
public class MyClassToBytesConverter implements Converter<MyClass, Binary> {

@Override
public Binary convert(MyClasssource) {
// your code
}
}
@ReadingConverter
public class BytesToMyClassConverter implements Converter<Binary, MyClass> {

@Override
public MyClass convert(Binary source) {
/// your code
}
}

关于java - 在 Spring Data Mongo 中设置自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com