You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Jackson序列化ZonedDateTime未按ISO格式输出问题

问题原因与解决方案

你的问题出在没有禁用Jackson默认的日期转时间戳特性——即便你给ZonedDateTime注册了序列化器,Jackson默认开启的WRITE_DATES_AS_TIMESTAMPS会强制把日期类型序列化为数字时间戳,直接覆盖了你配置的序列化器逻辑。

修改后的配置代码

在getObjectMapper()方法中添加禁用该特性的配置即可:

@Bean
@Primary
public ObjectMapper serializingObjectMapper() {
  return getObjectMapper();
}

public static ObjectMapper getObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  JavaTimeModule javaTimeModule = new JavaTimeModule();
  DateTimeFormatter dateTimeFormatter = ofPattern("yyyy-MM-dd'T'HH:mm:ss");
  DateTimeFormatter dateFormatter = ofPattern("yyyy-MM-dd");

  javaTimeModule.addSerializer(LocalDateTime.class,
      new LocalDateTimeSerializer(dateTimeFormatter));
  javaTimeModule.addDeserializer(LocalDateTime.class,
      new LocalDateTimeDeserializer(dateTimeFormatter));

  javaTimeModule.addSerializer(LocalDate.class,
      new LocalDateSerializer(dateFormatter));
  javaTimeModule.addDeserializer(LocalDate.class,
      new LocalDateDeserializer(dateFormatter));

  javaTimeModule.addSerializer(ZonedDateTime.class, ZonedDateTimeSerializer.INSTANCE);
  javaTimeModule.addDeserializer(ZonedDateTime.class, InstantDeserializer.ZONED_DATE_TIME);

  objectMapper.registerModule(javaTimeModule);
  // 新增:禁用默认的日期转时间戳特性
  objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  objectMapper.setSerializationInclusion(Include.NON_NULL);
  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

  return objectMapper;
}

补充说明

  • 关闭WRITE_DATES_AS_TIMESTAMPS后,Jackson会使用你注册的ZonedDateTimeSerializer.INSTANCE来序列化ZonedDateTime,默认输出ISO-8601格式带时区信息的字符串,比如"2022-07-26T14:00:22+08:00[Asia/Shanghai]",符合ISO标准。
  • LocalDateTime之前能正常输出是因为你自定义了格式化器,且该类型在Jackson内部的处理逻辑中,自定义序列化器优先级高于WRITE_DATES_AS_TIMESTAMPS特性,而ZonedDateTime则受该特性影响更大。

内容的提问来源于stack exchange,提问作者Patan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:45:38