【问题标题】:Jackson Java 8 DateTime serialisationJackson Java 8 DateTime 序列化
【发布时间】:2015-01-14 19:44:58
【问题描述】:

Jackson 默认启用 WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS(READ_)运行 java.time.Instant。 jackson-datatype-jsr310

它会生成这样的 JSON

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

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

我认为默认使用 nanos 方法应该是有原因的,那是什么原因呢?

【问题讨论】:

  • 原因可能是 Jackson 尽量不失去 Instant 的精度。接收者可能不是 JavaScript。
  • 是的,很可能你是对的。但是 nonos 在这里真的是零。也许这更适用于 Java 8 java.time。

标签: timestamp java-8 milliseconds java-time jackson-modules


【解决方案1】:

一种方法是创建您自己的 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 的代码:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS 确实是一个令人困惑的名称,因为它的实际作用是:它将时间戳写为带有小数部分的 SECONDS(不是 NANOSECONDS)。而小数部分在点之后最多包含6位数字,因此可以解释为NANOSECONDS部分,但整个值仍然以秒为单位。
    • mapper.configure() - 这应该在哪里完成?你知道如何在 XML 中做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2011-08-07
    • 2015-06-20
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多