Kon*_*rov 2 java spring mongodb mongodb-java spring-data-mongodb
我们正在尝试为此设置我们自己的转换器,Spring Data Mongo并遇到了问题。
好像Spring从不要求registerConvertersIn使用CustomConversions,因此通过重写添加的自定义转换器AbstractMongoConfiguration#customConversions永远不会成为转换的一部分。
我们正在使用Spring Data Mongo 1.6.3,但对于1.8.0来说似乎也可能是个问题(我检查了对的调用,CustomConversions#registerConvertersIn但均未找到。)
我可以通过这样的CustomConversions#registerConvertersIn自定义调用来解决此问题MappingMongoConverter:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
那是一个错误还是我们做错了什么?
找到了另一种解决方法:https : //stackoverflow.com/a/14369998/4567261
And*_*own 12
在 Spring Boot 2.x 中,它就像创建一个注册所有转换器的注册 bean 一样简单:
@Configuration
public class Converters {
@Bean
public MongoCustomConversions mongoCustomConversions() {
return new MongoCustomConversions(
Arrays.asList(
new MyClassToBytesConverter(),
new BytesToMyClassConverter()));
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建您的转换器类:
@WritingConverter
public class MyClassToBytesConverter implements Converter<MyClass, Binary> {
@Override
public Binary convert(MyClasssource) {
// your code
}
}
Run Code Online (Sandbox Code Playgroud)
@ReadingConverter
public class BytesToMyClassConverter implements Converter<Binary, MyClass> {
@Override
public MyClass convert(Binary source) {
/// your code
}
}
Run Code Online (Sandbox Code Playgroud)
我花了一个小时才弄明白在最新版本的 spring 数据 mongo 中,org.bson.Document应该使用com.mongodb.BasicDBObject. 下面是一个例子:
@Component
@WritingConverter
public class UserModelConverter implements Converter<UserModel, Document> {
@Override
public Document convert(UserModel s) {
Document obj = new Document();
obj.put("firstName", "FirstName");
obj.put("lastName", "LastName");
obj.remove("_class");
return obj;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
但这对我没有任何帮助。在设置mongo模板时,我们需要告诉mongo db使用自定义转换。
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongo(), mongoDatabase);
MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
mongoMapping.setCustomConversions(customConversions()); // tell mongodb to use the custom converters
mongoMapping.afterPropertiesSet();
return mongoTemplate;
}
Run Code Online (Sandbox Code Playgroud)
单击此链接以获取更多详细信息:http : //ufasoli.blogspot.in/2017/06/custom-converter-for-mongodb-and-spring.html
你用 注释你的MongoConfig类吗@Configuration?
您的类 MongoConfig 需要由 Spring BeanFactory 管理才能自动调用回调afterPropertiesSet()(conversions.registerConvertersIn(conversionService)最初调用的位置)
如果你没有注释你的配置bean,你需要调用afterPropertiesSet()自己
| 归档时间: |
|
| 查看次数: |
4640 次 |
| 最近记录: |