使用SpringData-MongoDB将Java 8 Instant存储为BSON日期
我有以下类,我想使用Spring Data存储在MongoDB中
@Document()
public class Tuple2<T extends Enum<T>> {
@Id
private String id;
@Indexed
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private final Instant timeCreated;
...
}
DateTimeFormat annotation javadoc 指出:
声明字段应设置为日期时间的格式。支持按样式模式、ISO 日期时间模式或自定义格式模式字符串进行格式设置。可以应用于java.util.Date,java.util.Calendar,java.long.Long,Joda-Time值类型;从Spring 4和JDK 8开始,到JSR-310 java.time类型也是如此。
我使用的是Spring 4.1.1和JDK 8,所以我希望它适用于.但是,以下是实际存储的内容:Instant
"timeCreated" : {
"seconds" : NumberLong(1416757496),
"nanos" : 503000000
}
如果我像这个答案中解释的那样编写并注册从即时到日期的自定义转换器,那么它就可以工作了,但是我想避免这种情况,因为我相信一定有更好的方法。
在进一步挖掘Spring源代码之后,我发现了以下看起来很有前途的类:Jsr310DateTimeFormatAnnotationFormatterFactory
使用 JDK 8 中的 JSR-310 java.time 包格式化使用 DateTimeFormat 注释注释的字段。
它的源代码没有引用,但它确实引用了 OffsetTime 和 LocalTime。即便如此,当我在示例中将 Instant 更改为 OffsetDateTime 时,它仍然存储为复合对象而不是 ISODate。Instant
缺少什么?