首页 文章

Spring Mongo转换器未注册

提问于
浏览
0

我注册了一组Mongo转换器(包括Jsr310Converters),但它没有将LocalDate转换为Date(因为canConvertFromLocalDateToDate等于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;

}

}

当我尝试使用LocalDate字段存储一些实体时,我得到一个异常:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.time.LocalDate] to type [java.util.Date]

1 回答

  • 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;
    
    }
    

相关问题