在尝试插入整数/长整数/列表
Couldn't find PersistentEntity for type class...
MongoCustomConvertions 对于自定义转换类完全正常工作。 只有 Integer、Long 等基本类型失败。
MongoCustomConversions bean 在 MongoConfig 文件中定义。
public class MongoConfigContext extends AbstractMongoClientConfiguration {
.....
.....
.....
@Override
@Bean
public MongoCustomConversions customConversions() {
List<Converter<?, ?>> converters = new ArrayList<>();
if (extension != null) {
List<Converter<?, ?>> additionalConverters = extension.additionalConverters();
if (!CollectionUtils.isEmpty(additionalConverters)) {
converters.addAll(extension.additionalConverters());
}
}
return new MongoCustomConversions(converters);
}
.....
.....
.....
}
由于这是父库的一部分,我添加了一个抽象类来提供一种通过 MongoConfigContextExtension 类在服务中添加 CustomConversions 的方法。
public abstract class MongoConfigContextExtension {
public List<Converter<?, ?>> additionalConverters() {
return Collections.emptyList();
}
}
将任何对象转换为 DBObject 的方法
protected Object convertToDbData(Object data) {
if (data == null || data instanceof BSONObject || data instanceof String) {
return data;
} else {
if (data instanceof Collection || data.getClass().isArray()) {
BasicDBList list = new BasicDBList();
((Collection)data).forEach(datum -> {
DBObject dbData = new BasicDBObject();
converter.write(datum, (Bson) dbData); // fails when datum is numeric
list.add(datum);
});
return list;
} else {
DBObject dbData = new BasicDBObject();
converter.write(data, (Bson) dbData); // fails when datum is numeric
return dbData;
}
}
}
测试班:
@Test
public void testIntCovert() {
Integer val = new Integer(20);
curator.update(DEMO_PATH, val, Integer.class);
}
错误日志:
org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.Integer
at org.springframework.data.mapping.context.MappingContext.getRequiredPersistentEntity(MappingContext.java:80)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:883)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:834)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:120)
at com.abc.def.xyz.event.ConfigEventHandler.convertToDbData(ConfigEventHandler.java:52)
有没有什么东西不见了!
我在我的系统中克隆了 spring-data-mongodb 项目,我尝试从 MappingMongoConverterUnitTests 执行相同的测试用例以检查是否有任何配置遗漏。
如果 Integer/Long/List 失败,这些也会写
预期:基本类型的 Mongo 转换应该有效。