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

我有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,包括声明为私有静态类的InstantToLongConverter和LongToInstantConverter.

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

解决方法:

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

>第一步.添加简单的弹簧转换器

public class InstantToLongConverter implements Converter {

@Override

public Long convert(Instant instant) {

return instant.toEpochMilli();

}

}

public class LongToInstantConverter implements Converter {

@Override

public Instant convert(Long source) {

return Instant.ofEpochMilli(source);

}

}

public class LocalDateToStringConverter implements Converter {

@Override

public String convert(LocalDate localDate) {

return localDate.toString();

}

}

public class StringToLocalDateConverter implements Converter {

@Override

public LocalDate convert(String source) {

return LocalDate.parse(source);

}

}

>第二步.在您的AbstractMongoConfiguration实现中使用MappingMongoConverter注册这些自定义转换器,如下所示:

@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字段将作为长值保留,LocalDates将作为字符串保留.

标签:java,java-8,spring-data,spring-data-mongodb,java-time

来源: https://codeday.me/bug/20190930/1836165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值