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

Spring MVC中Date序列化异常:Postman报错,如何正确序列化Date对象?

解决Spring MVC中Date序列化输出为new Date(...)的问题

看起来你遇到的核心问题是Jackson把Date序列化成了JavaScript风格的new Date(1514851200000),这不是标准JSON格式,所以Postman解析时出错。虽然你加了@JsonFormat注解,但可能是配置没到位,我给你几个可行的解决方案:

1. 确认@JsonFormat注解的包和配置

首先要确保你用的是Jackson官方的注解,也就是com.fasterxml.jackson.annotation.JsonFormat,别用错了其他包的注解。另外建议加上时区参数,避免因时区差异导致的日期偏移:

import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import java.util.Date;

public class YourEntity {
    @Column(name = "date_saisie")
    // 加上timezone,根据你的业务时区调整,比如GMT+8是东八区
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date date_saisie;

    // 记得添加getter和setter方法
    public Date getDate_saisie() {
        return date_saisie;
    }

    public void setDate_saisie(Date date_saisie) {
        this.date_saisie = date_saisie;
    }
}

2. 全局配置Jackson日期格式化(推荐)

如果不想每个实体类都加注解,可以全局配置Jackson的日期格式,这样所有Date类型都会统一序列化:

如果你用的是Spring Boot

直接在application.properties或application.yml里添加配置:

# 指定日期格式
spring.jackson.date-format=yyyy-MM-dd
# 指定时区
spring.jackson.time-zone=GMT+8

如果你用的是普通Spring MVC

创建一个配置类,自定义ObjectMapper:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        objectMapper.setDateFormat(dateFormat);
        return objectMapper;
    }
}

3. 排查是否有其他序列化框架干扰

如果你的项目里引入了Gson等其他JSON序列化框架,Spring可能会默认使用它们,这时候Jackson的@JsonFormat注解就会失效。你可以:

  • 移除Gson等依赖,只用Jackson;
  • 或者配置Spring强制使用Jackson,比如在Spring Boot里添加:
    spring.mvc.converters.preferred-json-mapper=jackson
    

为什么会出现new Date(...)这种输出?

Jackson在默认情况下,如果没有配置日期格式化规则,会把java.util.Date序列化成JavaScript兼容的对象格式(也就是new Date(timestamp)),但这不符合标准JSON规范,所以Postman解析时会抛出错误。通过上面的配置,就能让Jackson把Date转成你指定的字符串格式,比如"2018-01-01",这样Postman就能正常解析了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:44:14