杰克逊 - 将ZonedDateTime序列化为ISO 8601字符串

JDC*_*JDC 12 java serialization datetime jackson

我想序列化ZonedDateTimeISO 8601标准的字符串,如:
2018-02-14T01:01:02.074+0100.

我尝试了以下方法:

@JsonProperty("@timestamp")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private ZonedDateTime timestamp;
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它没有给出正确的结果,并将ZonedDateTime其所有字段等序列化.

谢谢你的帮助!

Man*_*dis 23

确保包含并注册Jackson模块,以获取Java 8中引入的日期和时间类.例如

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.8.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如有必要:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)

附注:您也可以在没有注释的情况下获得所需的格式,并且只是将ObjectMapper日期配置为不将日期序列化为时间戳.例如

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Run Code Online (Sandbox Code Playgroud)

  • 对于任何将 Spring MVC 项目重构为 Spring Boot Web 应用程序的人,请确保您没有用 `@EnableWebMvc` 注释的 `@Configuration` 类!这导致 Spring MVC 加载并忽略我们的 Spring Boot 配置。 (4认同)
  • 我试过这个没有成功。甚至尝试过: mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - 没有快乐。 (2认同)