繁体   English   中英

Jackson Java 8 DateTime序列化

Jackson Java 8 DateTime serialisation

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

Jackson运行java.time.Instant,默认启用WRITE_DATE_TIMESTAMPS_AS_NANOSECONDSREAD_ )。 杰克逊-数据类型- jsr310

它像这样生成JSON

{ "createDate":1421261297.356000000, "modifyDate":1421261297.356000000 }

在JavaScript中,从传统的millis时间戳(而不是像上面的秒/ nanos)那样获得Date要容易得多,比如new Date(1421261297356)

我认为应该有一些理由默认采用纳米方法,那么这是什么原因呢?

2 个回复

一种方法是创建自己的Jackson模块并按照您需要的方式进行序列化。

你甚至可以做一个简单的Jackson8Module,它扩展了Jackson SimpleModule并提供了一些lambda友好的方法。

ObjectMapper jacksonMapper = new ObjectMapper();
Jackson8Module module = new Jackson8Module();
module.addStringSerializer(LocalDate.class, (val) -> val.toString());
module.addStringSerializer(LocalDateTime.class, (val) -> val.toString());
jacksonMapper.registerModule(module);

以下是Jackson8Module的代码:

有没有办法使用Java 8 lambda样式添加自定义Jackson序列化程序?

我发现这很奇怪,因为使用JSR310Module类如Calendar或Date仍然以毫秒为单位进行序列化。 这不符合逻辑。

在JSR310Module文档( https://github.com/FasterXML/jackson-datatype-jsr310 )中,他们引用了这个:

对于序列化,时间戳写为小数(小数),其中数字为秒,小数为小数秒,如果启用WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS(默认情况下),分辨率可以为纳秒,具体取决于基础JDK实现。 如果禁用WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,则将时间戳写为整数毫秒。

所以,一个简单的解决方案,你想要实现它的配置你的映射器,就像他们说:

  mapper.configure( SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false );
  mapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM