我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

@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,就可以 两个一起用,各司其职。

posted on 2025-04-30 10:31  我就是奇迹  阅读(206)  评论(0)    收藏  举报