相关疑难解决方法(0)

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

我正在使用Jackson 2.8并且需要与ISO 8601时间戳内不允许毫秒的API进行通信.

预期的格式是这样的: "2016-12-24T00:00:00Z"

我正在使用Jackson的JavaTimeModule WRITE_DATES_AS_TIMESTAMPS设置为false.

但这将打印毫秒.

所以我尝试使用objectMapper.setDateFormat哪个没有改变任何东西.

我目前的解决方法是:

ObjectMapper om = new ObjectMapper();

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
    .appendInstant(0)
    .toFormatter();

JavaTimeModule jtm = new JavaTimeModule();
jtm.addSerializer(Instant.class, new JsonSerializer<Instant>() {
    @Override
    public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
        gen.writeString(dtf.format(value));
    }
});

om.registerModule(jtm);
Run Code Online (Sandbox Code Playgroud)

我正在覆盖默认的序列化工具Instant.class.


有没有什么好办法使用一些配置参数来解决这个问题?

java jackson jackson-modules java-time jackson2

12
推荐指数
3
解决办法
9306
查看次数

使用Jackson将Instant序列化为ISO8601时强制毫秒

在我使用的项目中,我有一些与使用Jackson的JSON序列化相关的问题Spring Boot 2.0.0.M6,Spring Framework 5.0.1.RELEASE以及Jackson 2.9.2.

我在以下位置配置了以下与Jackson相关的设置application.properties:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
Run Code Online (Sandbox Code Playgroud)

序列化主要按照我的需要工作.尽管如此,我注意到杰克逊似乎已经截止了毫秒数000.

测试1:序列化Instant,毫秒设置为000:

  • 使用初始化Instant字段 Instant.parse("2017-09-14T04:28:48.000Z")
  • 使用Jackson序列化它
  • 输出将是 "2017-09-14T04:28:48Z"

测试2:使用设置为某些非000值的毫秒序列化Instant :

  • 使用初始化Instant字段 Instant.parse("2017-09-14T04:28:48.100Z")
  • 使用Jackson序列化它
  • 输出将是 "2017-09-14T04:28:48.100Z"

问题:

  • 是设计的那种行为?
  • 有什么我可以做的强制序列化000

java spring json spring-boot jackson2

10
推荐指数
2
解决办法
3294
查看次数