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
相关产品推荐
相关产品推荐

