日期处理 @JsonFormat

@JsonFormat 注解:日期格式化核心用法笔记

@JsonFormat 是 Jackson 框架提供的注解,用于统一控制 日期类型(如 Date)的序列化与反序列化格式,解决前后端日期数据交互的格式不一致问题。

一、核心作用

  • 序列化:将后端的 Date 对象,转换为指定格式的字符串(如 2025-10-29 16:00:00)返回给前端,替代默认的 ISO 格式(如 2025-10-29T16:00:00.000+00:00)。
  • 反序列化:将前端提交的指定格式日期字符串(如 2025-10-29 16:00:00),转换为后端的 Date 对象,确保格式匹配可正常解析。

二、关键属性与配置示例

1. 常用属性

属性名 作用说明
pattern 必选,指定日期格式字符串,如 yyyy-MM-dd(日期)、yyyy-MM-dd HH:mm:ss(日期 + 时间)。
timezone 必选,指定时区,避免时区偏移导致日期偏差,国内统一使用 GMT+8(东八区)。

2. 实际使用示例

在实体类的 Date 类型字段上直接标注,实现全局统一格式:

1
2
3
4
5
6
7
8
9
10
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;

public class User {
// 日期字段标注 @JsonFormat,统一序列化/反序列化格式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birth; // 出生日期

// 其他字段、getter/setter 省略
}

三、注意事项

  1. 依赖前提@JsonFormat 依赖 Jackson 相关包,Spring Boot 项目引入 spring-boot-starter-web 时会自动包含(无需额外导包)。
  2. 格式一致性:前端提交的日期字符串格式,必须与 pattern 定义的格式完全匹配(如 2025-10-29 16:00:00 不能写成 2025/10/29 16:00:00),否则会反序列化失败。
  3. 全局配置补充:若需对所有日期字段统一格式(无需逐个标注),可在 application.yml 中配置全局规则,优先级低于字段上的 @JsonFormat 注解:
1
2
3
4
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss # 全局日期格式
time-zone: GMT+8 # 全局时区