繁体   English   中英

Java Spring 如何在 MongoDb 中保留一个日期字段只要

[英]Java Spring how to persist a date field in MongoDb as long

我正在处理的项目有一个集合,其中一个字段是一个整数,代表一个日期。 代表 Java class model 有一个日期字段作为字段的对应。

我们使用Json 架构来创建集合并设置数据格式和必填字段。

db 上的数据已使用 json 文件导入,可以通过我们的 Java 应用程序毫无问题地读取:驱动程序能够将信息转换为Date ,而 model class 上没有注释或其他内容。

当我们需要从 java 应用程序保存同一个文档时,问题就出现了。 似乎驱动程序无法从 Date 到 long 进行反向转换。

你有什么建议吗?

我将 Date 更改为 Instant 并且它没有解决保存问题,但在阅读时它给出了以下异常:

“org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型 [java.lang.Long] 转换为类型 [java.time.Instant] 的转换器”

为了解决这个问题,我需要创建一个转换器:

public class FromLongToInstantConverter implements Converter<Long, Instant> {

    @Override
    public Instant convert(Long source) {
        return Instant.ofEpochMilli(source);
    }

}

这个转换器需要由 Mongo 驱动程序加载,所以我必须创建这个 class:

public abstract class AbstractMongoConfiguration extends AbstractMongoClientConfiguration {

    @Bean
    @Override
    public MongoCustomConversions customConversions() {
        List<Converter<?, ?>> converters = new ArrayList<>();
        converters.add(new FromLongToInstantConverter());
        return new MongoCustomConversions(converters);
    }

    /**
     *
     * @return
     */
    @Bean
    @Override
    public MongoTemplate mongoTemplate() {

        MappingMongoConverter converter = new MappingMongoConverter(
                new DefaultDbRefResolver(mongoDbFactory()), new MongoMappingContext());
        converter.setCustomConversions(customConversions());
        converter.afterPropertiesSet();
        return new MongoTemplate(mongoDbFactory(), converter);

    }

}

它将由应用程序中的 MongoConfig.java 扩展。

然而,此解决方案会导致此错误: Spring Boot - Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1

我为保存操作做了一个类似的转换器,并将其添加到上面的AbstractMongoConfiguration中:

public class FromInstantToLongConverter implements Converter<Instant, Long> {

    @Override
    public Long convert(Instant source) {
        return source.toEpochMilli();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM