当前位置: 首页 > 知识库问答 >
问题:

让Jackson序列化Java8瞬间的有效方法是纪元毫秒?

戚奇略
2023-03-14
public Instant getMyInstantVal() { return myInstantVal; }

序列化不能按原样工作,因为jackson-datatype-jsr310在缺省情况下不会立即返回Epoch毫秒。我考虑将@jsonFormat添加到上面的getter中,以便将即时转换为前端可以使用的东西,但它遇到了两个问题:(1)我可以提供的模式显然仅限于SimpleDateFormat,它没有提供“epoch milliseconds”选项;(2)当我试图将即时作为格式化日期发送到浏览器时,Jackson抛出了一个异常,因为@jsonFormat注释需要为即时添加一个时区属性,我不希望对此进行硬编码,因为它会因用户而异。

到目前为止,我的解决方案是使用@jsongetter创建一个替换getter,这导致Jackson使用此方法序列化MyInstantVal:

@JsonGetter("myInstantVal")
public long getMyInstantValEpoch() {
    return myInstantVal.toEpochMilli();
}

这样做合适吗?或者,我是否缺少一个很好的注释,可以放在getMyInstantVal()上,这样我就不必创建这些额外的方法了?

共有1个答案

南宫俊喆
2023-03-14

您只需阅读链接到的自述文件。强调我的:

如果启用了SerializationFeature#WRITE_DATES_AS_TIMESTAMPS特性,则大多数JSR-310类型序列化为数字(适当时为整数或小数),否则以标准的ISO-8601字符串表示形式序列化。

[...]

 类似资料:
  • 但它抛出了一个异常: JSONMappingException:意外标记(VALUE_NUMBER_INT),预期的value_string:预期的数组或字符串。 如何将epoch反序列化为?我想补充一点,如果将datatype从更改为,它可以非常好地工作。因此,最好反序列化到并创建getter和setter,它们将执行到的转换。

  • 我的Spring Boot API使用camelCase,但我需要通过我的API将一些请求代理到使用snake_case的第三方API。是否可以将Jackson配置为从snake_case反序列化第三方响应,然后将其序列化回camelCase到我的前端? 所需功能的逐步示例: 示例对象: 我调用我的API API调用第三方 第三方返回 我的API将其反序列化为 我的API序列化对象并返回 现在我使

  • 假设我有以下几门课: 当Jackson序列化的实例时,它将如下所示: 在类中是否有任何注释可以强制Jackson在序列化对象时调用方法? 当Jackson序列化的实例时,我希望看到以下输出之一:

  • 我刚刚根据新的(ish)Java8时间包将许多日期转换为LocalDateTime。到目前为止,我一直很喜欢这种转换,直到我开始尝试序列化和反序列化。 如何配置Jackson以支持他们?: LocalDateTime --serialize-- 这里有大量关于转换为格式化字符串的资料,但我似乎找不到utc时间戳的现成解决方案。

  • 我有一个带有一些方法ma、mb、mc的对象A,这个对象实现了一个只有ma和mb的接口B。 当我序列化B时,我希望只有ma和mb作为json响应,但我也得到mc。 我希望自动化这种行为,以便我序列化的所有类都基于接口而不是实现进行序列化。 我该怎么做? 例子: 实现: 序列化: 回应: 预期响应:

  • 问题内容: 我和Jackson有一个问题,我认为应该很容易解决,但是这真使我丧命。 假设我有一个看起来像这样的Java POJO类(假设对我来说是Getters和Setters): 我想将看起来像这样的JSON反序列化为User对象: 杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以制作一个具有单个User对象的UserWrapper类,然后使用该对象反序列化,但是我知道必须有