我正在尝试使用 fastxml jackson 在 mongo 集合中保留具有 java.util.Date
字段的 java 对象。
问题是 objectMapper 的默认性质是将 Date 存储为 NumberLong 类型。
例如,java.util.Date
类型的 createdTime
字段存储如下:
"createdTime": NumberLong("1427728445176")
我想以 ISODate 格式存储它,该格式在 mongo Shell 中可用。
现在,我知道有办法格式化对象映射器以将日期存储在字符串日期格式中。 但我只是在寻找 ISODate() 格式。
例如
"createdTime": ISODate("2015-01-20T16:39:42.132Z")
有没有办法做到这一点? 请高手指教。 提前感谢您的帮助。
最佳答案
您需要的是 Jackson Joda Module .如果您将其导入到您的类路径中,您可以在映射器上执行以下操作以将其写入所需的时间戳:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
mapper.writeValueAsString(date);
您可以根据需要将上述代码示例中的 date
替换为您的 POJO。
编辑: 看起来您真正想要的是自定义序列化程序。看起来像这样:
public class IsoDateSerializer extends JsonSerializer<DateTime> {
@Override
public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) {
String isoDate = ISODateTimeFormat.dateTime().print(value);
jgen.writeRaw("ISODATE(\"" + isoDate + "\")");
}
然后您可以在映射器上为所有 DateTime 类型注册它
mapper.addSerializer(DateTime.class, new IsoDateSerializer());
或使用注解在函数上指定它
@JsonSerializer(using = IsoDateSerializer.class)
public DateTime createdTime;
关于java - 如何在 MongoDb 中使用 jackson 将日期字段存储为 ISODate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354053/