[英]MongoDB No converter found capable of converting from type [java.lang.String] to type [java.time.LocalDateTime]
MongoDB, Spring Data, findAll() method error: MongoDB、Spring Data、findAll() 方法错误:
No converter found capable of converting from type [java.lang.String] to type [java.time.LocalDateTime]找不到能够从 [java.lang.String] 类型转换为 [java.time.LocalDateTime] 类型的转换器
public class EntityName {
@Id
private String id;
private Map<LocalDateTime, Integer> statistic;
}
I am able to save entity, but not able to load it.我能够保存实体,但无法加载它。 Any quick fixes?任何快速修复?
This solved the problem:这解决了这个问题:
@Configuration
public class MongoConfiguration extends AbstractMongoConfiguration {
@Value("${spring.data.mongodb.database:test}")
private String database;
@Value("${spring.data.mongodb.host:localhost}:${spring.data.mongodb.port:27017}")
private String host;
@Autowired
private MappingMongoConverter mongoConverter;
// Converts . into a mongo friendly char
@PostConstruct
public void setUpMongoEscapeCharacterConversion() {
mongoConverter.setMapKeyDotReplacement("_");
}
@Override
protected String getDatabaseName() {
return database;
}
@Override
public Mongo mongo() throws Exception {
return new MongoClient(host);
}
@Bean
@Override
public CustomConversions customConversions() {
List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
converterList.add(new MongoLocalDateTimeFromStringConverter());
return new CustomConversions(converterList);
}
private static final class MongoLocalDateTimeFromStringConverter implements Converter<String, LocalDateTime> {
@Override
public LocalDateTime convert(String source) {
return source == null ? null : LocalDateTime.parse(source);
}
}
}
@Maksym's way has helped me as well. @Maksym 的方式也帮助了我。 I had to adjust it a little bit for Spring Framework 5 and Spring Boot 2:我不得不为 Spring Framework 5 和 Spring Boot 2 稍微调整一下:
@Bean
@Primary
public MappingMongoConverter mongoConverter(
@Autowired MongoMappingContext mongoMappingContext,
@Autowired MongoDbFactory mainMongoFactory,
@Autowired MongoCustomConversions conversions
) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mainMongoFactory);
MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
mongoConverter.setMapKeyDotReplacement("#");
mongoConverter.afterPropertiesSet();
mongoConverter.setCustomConversions(conversions);
return mongoConverter;
}
@Bean
public MongoMappingContext mongoMappingContext() {
MongoMappingContext context = new MongoMappingContext();
context.setSimpleTypeHolder(new SimpleTypeHolder(new HashSet<>(Arrays.asList(
DateTime.class,
LocalDateTime.class
)), MongoSimpleTypes.HOLDER));
return context;
}
@Bean
public MongoCustomConversions customConversions() {
List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
converterList.add(new MongoLocalDateTimeFromStringConverter());
converterList.add(new MongoDateTimeFromStringConverter());
return new MongoCustomConversions(converterList);
}
private static final class MongoLocalDateTimeFromStringConverter implements Converter<String, LocalDateTime> {
@Override
public LocalDateTime convert(String source) {
return source == null ? null : LocalDateTime.parse(source);
}
}
private static final class MongoDateTimeFromStringConverter implements Converter<String, DateTime> {
@Override
public DateTime convert(String source) {
return source == null ? null : DateTime.parse(source);
}
}
Ref - https://github.com/lordofthejars/nosql-unit#dataset-format参考 - https://github.com/lordofthejars/nosql-unit#dataset-format
If you want to use ISODate function or any other javascript function you should see how MongoDB Java Driver deals with it.如果您想使用 ISODate 函数或任何其他 javascript 函数,您应该查看 MongoDB Java Driver 如何处理它。 For example in case of ISODate:例如在 ISODate 的情况下:
In your json file use $date for conversion在您的 json 文件中使用 $date 进行转换
"bornAt":{ "$date" : "2011-01-05T10:09:15.210Z"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.