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

它像这样生成JSON

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

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

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

#1楼 票数:5

一种方法是创建自己的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序列化程序?

#2楼 票数:5

我发现这很奇怪,因为使用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 );

  ask by Andrii Karaivanskyi translate from so

未解决问题?本站智能推荐:

6回复

JDK8 java.time 是否有 jackson 数据类型模块?

我正在为新的JDK8 java.time类寻找一个模块。 我浏览了FasterXML GitHub 项目列表,目前没有找到。 据我了解,Jackson 仍在针对 JDK6 进行编译,因此不能直接使用这些类,并且必须将其构建为单独的模块,正如 Joda 所要求的那样。 我不介意开始这个项目,尽管想
13回复

如何从 Java 8 中的 LocalDateTime 获取毫秒数

我想知道是否有办法使用 Java 8 的新LocalDate 、 LocalTime或LocalDateTime类来获取自 1-1-1970(纪元)以来的当前毫秒数。 已知的方法如下: 或者
3回复

Jackson,java.time,ISO 8601,序列化无毫秒

我正在使用Jackson 2.8并且需要与ISO 8601时间戳内不允许毫秒的API进行通信。 预期格式为: "2016-12-24T00:00:00Z" 我正在使用Jackson的JavaTimeModule, WRITE_DATES_AS_TIMESTAMPS设置为false 。
9回复

如何使用 LocalDateTime 解析/格式化日期? (Java 8)

Java 8 添加了一个新的java.time API 来处理日期和时间 ( JSR 310 )。 我将日期和时间作为字符串(例如"2014-04-08 12:30" )。 如何从给定的字符串中获取LocalDateTime实例? 完成对LocalDateTime对象的处理后:如何将Local
1回复

日期Java之间的时差?

我一直在使用旧的 Date API 以yyyyMMdd'T'HHmmss格式计算两次之间的时差。 客户端在请求中设置requestExpirationTime属性,服务器进行验证检查以确保“ RequestExpirationTime 不在当前系统时间之前”。 客户: 服务器: 此代码出
1回复

java.sql.Timestamp ZoneOffset与java.time不匹配

Instant inst = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); - > 2015-10-19T00:00:00Z Timestamp.from(inst) - > 2015-10-19 11:00
3回复

如何将java.sql.timestamp转换为LocalDate(java8)java.time?

在Java 8中,如何将Timestamp (在java.sql )转换为LocalDate (在java.time )?
1回复

为什么Java 8 Time无法为我显示时区Etc / GMT + 1的正确时间

调试时的此值显示2019-07-02T14:23:57.463-01:00 [Etc / GMT + 1] 应该是16:23,我在想什么..由于某种原因,时钟慢了2个小时?