@DateTimeFormat 和 @JsonFormat 都可以用于控制 日期格式的转换,但它们作用的时机和目标完全不同:
🧩 核心区别概览
|
对比项 |
@DateTimeFormat |
@JsonFormat |
|---|---|---|
|
📦 所属框架 |
Spring(Spring MVC 数据绑定) |
Jackson(JSON 序列化 / 反序列化) |
|
🕰 作用时机 |
请求参数绑定、表单提交时(String → Java对象) |
JSON 数据序列化和反序列化时(Java对象 ↔ JSON字符串) |
|
📍 应用场景 |
前端表单/URL参数转为 Java 对象字段 |
Java 对象转为 JSON(响应),或从 JSON 创建对象(请求体) |
|
🔧 常用于 |
Controller 参数、实体类字段 |
实体类字段,影响接口响应或请求体 |
|
🔁 生效方向 |
只影响数据绑定(parse) |
同时影响序列化和反序列化(print + parse) |
✅ 示例对比
1️⃣
@DateTimeFormat
—— 处理表单/URL 参数
@GetMapping("/user")
public String getUser(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
// 处理格式为 yyyy-MM-dd 的参数
}
适合表单提交或 URL 参数:
GET /user?date=2025-04-30
2️⃣
@JsonFormat
—— 控制 JSON 的格式化输出/输入
public class User {
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate birthDate;
}
作用于:
-
返回 JSON 时:控制日期字段格式
-
接收 JSON 请求体时:控制反序列化规则
示例 JSON 输出:
{
"birthDate": "2025-04-30"
}
🎯 总结一句话
-
@DateTimeFormat:作用于 Spring 的数据绑定,比如表单、URL 参数等。
-
@JsonFormat:作用于 Jackson 的 JSON 序列化/反序列化,用于处理接口的 JSON 输入输出。
如果你的应用既需要从 URL 获取参数、又需要返回 JSON,就可以 两个一起用,各司其职。
浙公网安备 33010602011771号