1

将 MongoJack 与以下版本的库一起使用,我想将 POJO 存储到 Mongo(Azure Mongo API for Cosmos,3.6)中,并有一个使用 java.time 序列化为 Mongo Date ISODate() 格式的字段。

  • mongodb-driver-sync 4.0.4
  • 杰克逊数据绑定 2.10.1
  • 杰克逊数据类型 jsr310 2.10.1
  • mongojack 4.0.2

如果我在 POJO 上使用 java.util.Date,一切都按预期工作 - 数据以以下格式存储在 Mongo 中

在此处输入图像描述

但是,如果我使用 java.time.LocalDateTime,那么数据将作为字符串存储在 Mongo 中。我希望将其存储为 Mongo 中的 ISODate 类型,并且我不想在我的 POJO 上使用 java.util.Date。同样,如果我使用 Instant 作为字段类型 - 数据存储为字符串 - 它会正确地序列化到 POJO 上的 Instant 字段/从其序列化,但数据不会存储为 Mongo 中的预期类型。

我在这里遗漏了一些明显的东西吗?看看 Mongo Jack,它定义的反序列化器是从 jackson.databind 扩展 StdDeserializer,它使用这些 parseDate 方法转换为 java.util.Date - 它定义的唯一 java.time 反序列化器是 InstantDeserializer但如前所述,它没有被存储以我想要的格式。

根据文档调用了 ObjectMapperConfigurer.configureObjectMapper ,它添加了 Javatime 模块、设置功能和序列化程序等,https://github.com/mongojack/mongojack/blob/9e2339d02624b1357ecab6e27c35d5db96bd7d60/src/main/java/org/mongojack/internal /MongoJackModule.java#L46

这应该开箱即用,还是我需要编写一些序列化程序来支持它?

4

0 回答 0