【问题标题】:Save LocaTime via SpringData to MongoDB通过 Spring Data 将位置保存到 MongoDB
【发布时间】:2015-07-22 21:15:22
【问题描述】:

我尝试使用 spring-boot-starter-parent (org.springframework.boot 1.2.3.RELEASE) 使用 SpringData 将 LocalTime (joda) 字段保存到 MongoDB 并获得 StackOverflowError。

StackOverflowError 在 BeanWrapper 方法中

public <S> S getProperty(PersistentProperty<?> property, Class<? extends S> type)

堆栈跟踪:

http-nio-8080-exec-2@5509 daemon, prio=5, in group 'main', status: 'RUNNING'
  at org.springframework.data.mapping.model.BeanWrapper.getProperty(BeanWrapper.java:120)
  at org.springframework.data.mapping.model.BeanWrapper.getProperty(BeanWrapper.java:100)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:419)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:412)
  at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:307)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:412)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:511)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:424)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:412)
  at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:307)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:412)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:511)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:424)
  at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:412)
  at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:307)...

【问题讨论】:

    标签: mongodb spring-data jodatime


    【解决方案1】:

    将这两个转换器添加到 CustomConversions 可以解决问题。

    @Configuration
    public class MongoConfiguration extends AbstractMongoConfiguration {
        @Override
        protected String getDatabaseName() {
            return "databasename";
        }
    
        @Override
        public Mongo mongo() throws Exception {
            return new MongoClient("localhost");
        }
    
        @Override
        public CustomConversions customConversions() {
            List<Converter<?, ?>> converters = new ArrayList<>();
            converters.add(new LocalTimeToStringConverter());
            converters.add(new StringToLocalTimeConverter());
            return new CustomConversions(converters);
        }
    
    }
    
    public class LocalTimeToStringConverter implements Converter<LocalTime, String> {
        @Override
        public String convert(LocalTime localTime) {
            return localTime.toString();
        }
    }
    
    
    
    public class StringToLocalTimeConverter implements Converter<String, LocalTime> {
        @Override
        public LocalTime convert(String s) {
            return LocalTime.parse(s);
        }
    }
    

    【讨论】:

    • 现在所有的字符串都将被转换为LocalTime,我该如何解决这个问题?
    • @user1955934 如果类的字段类型为 LocalTime,则字符串应仅转换为 LocalTime
    猜你喜欢
    • 2018-02-02
    • 2022-12-02
    • 2017-08-24
    • 1970-01-01
    • 2017-08-09
    • 2012-09-23
    • 1970-01-01
    • 2012-05-06
    • 2018-05-27
    相关资源
    最近更新 更多