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

如何在不修改服务器时区的前提下代码层面修复SpringFramework应用JSON日期格式异常

根本原因

Spring Framework默认使用Jackson作为JSON序列化组件,当你没有对日期类型的序列化规则做显式配置时,Jackson会自动读取部署服务器的默认时区、系统Locale来生成日期字符串:

  1. 新旧服务器时区分别为EST、UTC,导致序列化后的时间值出现固定偏移
  2. 两台服务器的默认Locale配置不同,不同Locale的标准日期+时间拼接规则存在差异,部分Locale会在年份后额外添加逗号,就是你观察到的格式差异。
代码层调整方案(无需修改服务器配置)

要完全对齐旧服务器的返回格式,只需要在代码中硬编码Jackson的日期序列化规则,屏蔽服务器本地配置的影响,有两种实现方式:

全局配置(推荐,全项目日期格式统一生效)

Spring Boot项目

直接在application.properties中添加如下配置即可:

# 固定日期序列化格式,和旧服务器返回格式完全匹配
spring.jackson.date-format=MMM d, yyyy hh:mm:ss a
# 强制使用旧服务器的EST时区,避免时间偏移
spring.jackson.time-zone=EST
# 固定Locale为en_US,保证英文月份、AM/PM标识正确,同时避免多余逗号生成
spring.jackson.locale=en_US

传统Spring MVC项目

手动配置Jackson的消息转换器Bean:

@Configuration
public class CustomJacksonConfig {
    @Bean
    public MappingJackson2HttpMessageConverter jacksonMessageConverter() {
        ObjectMapper mapper = new ObjectMapper();
        // 显式指定日期格式和Locale
        SimpleDateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy hh:mm:ss a", Locale.US);
        mapper.setDateFormat(dateFormat);
        // 显式指定时区为EST
        mapper.setTimeZone(TimeZone.getTimeZone("EST"));
        return new MappingJackson2HttpMessageConverter(mapper);
    }
}

局部字段配置

如果仅需要部分日期字段对齐旧格式,可直接在对应字段上添加@JsonFormat注解:

// 实体类字段示例
@JsonFormat(pattern = "MMM d, yyyy hh:mm:ss a", timezone = "EST", locale = "en_US")
private Date createTime;

配置完成后,Jackson的日期序列化规则会完全按照代码指定的参数执行,不再依赖服务器的本地时区、Locale配置,新服务器返回的日期格式就能和旧服务器完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:08