Spring Mongo转换器没有注册

时间:2018-05-24 09:23:11

标签: spring spring-data spring-mongo

我注册了一组 Mongo 转换器(包括Jsr310Converters),但它没有将LocalDate转换为Date(因为canConvertFromLocalDateToDate等于{ {1}})

false

当我尝试存储一些带有@Configuration public class MongoConfig { @Autowired MongoDbFactory mongoDbFactory; @Bean public MongoTemplate mongoTemplate() throws Exception { MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory), new MongoMappingContext()); converter.setMapKeyDotReplacement("_"); List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>(); converters.add(new GeoPointConverter()); converters.addAll(Jsr310Converters.getConvertersToRegister()); converters.addAll(JodaTimeConverters.getConvertersToRegister()); converters.addAll(ThreeTenBackPortConverters.getConvertersToRegister()); converter.setCustomConversions(new CustomConversions(CustomConversions.StoreConversions.NONE, converters)); //is FALSE ! boolean canConvertFromLocalDateToDate = converter.getConversionService().canConvert(LocalDate.class, Date.class); MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter); return mongoTemplate; } 字段的实体时,我得到一个例外:

  

org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.time.LocalDate]转换为类型[java.util.Date]的转换器

1 个答案:

答案 0 :(得分:1)

实际上我发现我在运行时有2个MappingMongoConverter实例。所以我只是重用spring创建的实例而不是实例化一个新实例:     @Autowired     MappingMongoConverter转换器;

完整的代码段是:

@Configuration
public class MongoConfig {


@Autowired 
MappingMongoConverter converter;

@Bean
public MongoTemplate mongoTemplate() throws Exception {
  // NO NEED TO INSTANTIATE NEW MappingMongoConverter 
  //MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory), new MongoMappingContext());

  converter.setMapKeyDotReplacement("_");

  List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
  converters.add(new GeoPointConverter());

  converters.addAll(Jsr310Converters.getConvertersToRegister());
  converters.addAll(JodaTimeConverters.getConvertersToRegister());
  converters.addAll(ThreeTenBackPortConverters.getConvertersToRegister());

  converter.setCustomConversions(new CustomConversions(CustomConversions.StoreConversions.NONE, converters));
  //is FALSE !
  boolean canConvertFromLocalDateToDate = converter.getConversionService().canConvert(LocalDate.class, Date.class); 
  converter.afterPropertiesSet();
  MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);

  return mongoTemplate;

}