首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SpringData-MongoDB将Java 8 Instant存储为BSON date

使用SpringData-MongoDB将Java 8 Instant存储为BSON date
EN

Stack Overflow用户
提问于 2014-11-24 00:38:55
回答 2查看 5.2K关注 0票数 19

我有以下类,我希望使用Spring数据将其存储在MongoDB中

代码语言:javascript
复制
@Document()
public class Tuple2<T extends Enum<T>> {

@Id
private String id;

@Indexed
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private final Instant timeCreated;

...
}

DateTimeFormat注释javadoc声明:

声明应将字段格式化为日期时间。支持按样式模式、ISO日期时间模式或自定义格式模式字符串设置格式。可以应用于java.util.Date、java.util.Calendar、java.long.Long、Joda-Time值类型;从Spring4和JDK8开始,也可以应用于JSR-310 java.time类型。

我使用的是Spring4.1.1和JDK8,所以我希望它适用于Instant。然而,下面是实际存储的内容:

代码语言:javascript
复制
"timeCreated" : {
    "seconds" : NumberLong(1416757496),
    "nanos" : 503000000
}

如果我像this answer中解释的那样编写并注册从即时到日期的自定义转换器,那么它就可以工作,但是我想避免这种情况,因为我相信一定有更好的方法。

在进一步挖掘Spring源代码后,我发现了以下类Jsr310DateTimeFormatAnnotationFormatterFactory,它看起来很有前途:

使用JDK8中的DateTimeFormat -310JSR- java.time包格式化使用JSR-310注释的字段。

它的“source”没有引用Instant,但它引用了OffsetTime和LocalTime。即使如此,当我在示例中将Instant更改为OffsetDateTime时,它仍然存储为复合对象,而不是ISODate。

遗漏了什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27091418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档