gpt4 book ai didi

Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:54 25 4
gpt4 key购买 nike

我有一个带有 Java 8 日期/时间字段的简单文档

@Document
public class Token {
private Instant createdAt;
...
}

我想坚持使用 Spring Data MongoDB 1.5 版。但是 java.time.Instant 类型的字段无法正确反序列化,因为 MappingMongoConverter 缺少 java.time 类的转换器。

在 Spring 4 中,我发现 org.springframework.format.datetime.standard.DateTimeConverters 具有不同的 Converter,包括 InstantToLongConverter LongToInstantConverter 声明为私有(private)静态类。

如何配置 MongoTemplate 以使用它们将 Instant 字段映射到 long?

最佳答案

我不知道这是否是最好的方法,但我向 Spring Data MongoDB 1.5.0.RELEASE 添加了 Java 8 日期/时间 (JSR-310) 类型支持,如下所示:

  1. 第一步。添加简单的 Spring Converter

    public class InstantToLongConverter implements Converter<Instant, Long> {
    @Override
    public Long convert(Instant instant) {
    return instant.toEpochMilli();
    }
    }

    public class LongToInstantConverter implements Converter<Long, Instant> {
    @Override
    public Instant convert(Long source) {
    return Instant.ofEpochMilli(source);
    }
    }

    public class LocalDateToStringConverter implements Converter<LocalDate, String> {
    @Override
    public String convert(LocalDate localDate) {
    return localDate.toString();
    }
    }

    public class StringToLocalDateConverter implements Converter<String, LocalDate> {
    @Override
    public LocalDate convert(String source) {
    return LocalDate.parse(source);
    }
    }
  2. 第二步。在您的 AbstractMongoConfiguration 实现中使用 MappingMongoConverter 注册这些自定义 Converter,如下所示:

    @Configuration
    @EnableMongoRepositories(basePackages = {"my.app.repository"})
    public class MongoConfiguration extends AbstractMongoConfiguration {

    ...

    @Override
    public CustomConversions customConversions() {
    return new CustomConversions(Arrays.asList(
    new InstantToLongConverter(), new LongToInstantConverter(),
    new LocalDateToStringConverter(), new StringToLocalDateConverter()));
    }
    }

现在您的文档的 Instant 字段将作为长值保留,LocalDate 作为字符串保留。

关于Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23972002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com