首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson Java8 DateTime序列化

Jackson Java8 DateTime序列化
EN

Stack Overflow用户
提问于 2015-01-15 03:44:59
回答 2查看 10K关注 0票数 2

杰克逊在运行java.time.Instant时默认启用了WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS (以及READ_)。jackson-datatype-jsr310

它会像这样生成JSON

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

在JavaScript中,从传统的millis时间戳(而不是上面的秒/纳米)获取日期要容易得多,比如new Date(1421261297356)

我认为默认情况下应该有一些理由使用nanos方法,那么是什么原因呢?

EN

回答 2

Stack Overflow用户

发布于 2015-01-27 03:07:08

一种方法是创建您自己的Jackson模块并执行您所需的序列化。

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

代码语言:javascript
复制
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的代码:

Is there a way to use Java 8 lambda style to add custom Jackson serializer?

票数 5
EN

Stack Overflow用户

发布于 2016-09-06 00:16:00

我发现这很奇怪,因为像日历或日期这样的JSR310Module类仍然是以毫秒为单位进行序列化的。这不符合逻辑。

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

对于序列化,如果启用了WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS (默认情况下),时间戳将被写成小数(小数),其中数字是秒,小数是小数秒,分辨率高达纳秒,具体取决于底层

实现。如果禁用WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,则时间戳以整数毫秒为单位写入。

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

代码语言:javascript
复制
  mapper.configure( SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false );
  mapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true );
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27951124

复制
相关文章

相似问题

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