Java 8 Date/Time (JSR-310) types mapping with Spring Data MongoDB(Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射)
问题描述
我有一个带有 Java 8 日期/时间字段的简单文档
I have simple document with Java 8 date/time fields
@Document
public class Token {
private Instant createdAt;
...
}
我想坚持使用 Spring Data MongoDB 1.5 版.但是 java.time.Instant
类型的字段无法正确反序列化,因为 MappingMongoConverter
缺少 java.time
类的转换器.
that I want to persist with Spring Data MongoDB version 1.5. But fields of type java.time.Instant
could not be de-serialized correctly because MappingMongoConverter
lacks converters for java.time
classes.
在 Spring 4 中,我发现 org.springframework.format.datetime.standard.DateTimeConverters
具有不同的 Converter
,包括 InstantToLongConverter
和 LongToInstantConverter
声明为私有静态类.
In Spring 4 I found org.springframework.format.datetime.standard.DateTimeConverters
with different Converter
s including InstantToLongConverter
and LongToInstantConverter
declared as private static classes.
如何配置 MongoTemplate
以使用它们将 Instant
字段映射到 long?
How can I configure MongoTemplate
to use them to map Instant
fields to longs?
推荐答案
我不知道这是否是最好的方法,但我在 Spring Data MongoDB 中添加了 Java 8 Date/Time (JSR-310) 类型支持 1.5.0.RELEASE
像这样:
I don't know if this is the best way but I added Java 8 Date/Time (JSR-310) types support to Spring Data MongoDB 1.5.0.RELEASE
like this:
第一步.添加简单的 Spring
Converter
s
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);
}
}
第二步.在 AbstractMongoConfiguration
实现中使用 MappingMongoConverter
注册这些自定义 Converter
,如下所示:
Second step. Register these custom Converter
s with MappingMongoConverter
in your AbstractMongoConfiguration
implementation like this:
@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
s 作为字符串持久化.
Now your document's Instant
fields will be persisted as long values and LocalDate
s as Strings.
这篇关于Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射
基础教程推荐
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01