MongoDB 找不到能够从 [java.lang.String] 类型转换为 [java.time.LocalDateTime] 类型的转换器

Mak*_*sym 8 java mongodb spring-data spring-data-mongodb

MongoDB、Spring Data、findAll() 方法错误:

找不到能够从 [java.lang.String] 类型转换为 [java.time.LocalDateTime] 类型的转换器

public class EntityName {
    @Id
    private String id;
    private Map<LocalDateTime, Integer> statistic;
}
Run Code Online (Sandbox Code Playgroud)

我能够保存实体,但无法加载它。任何快速修复?

Mak*_*sym 5

这解决了这个问题:

@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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)