@JsonFormat @DateTimeFormat
时间: 2025-05-21 09:38:39 浏览: 27
### 使用@JsonFormat和@DateTimeFormat注解格式化日期
在Java开发中,特别是基于Spring框架的应用程序中,`@JsonFormat` 和 `@DateTimeFormat` 是用于处理日期时间格式化的常用注解。以下是它们的具体用法以及适用场景。
#### 1. @DateTimeFormat 注解
该注解主要用于将前端传入的日期字符串解析为后端的时间对象(如`java.util.Date` 或 `java.time.LocalDateTime`),通常应用于控制器层中的方法参数或实体类字段上[^1]。
##### 示例代码:
```java
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
public class UserRequest {
@DateTimeFormat(pattern = "yyyy-MM-dd") // 定义输入日期的格式
private LocalDate birthDate;
// Getter and Setter methods...
}
```
在此示例中,当客户端发送类似于 `"birthDate": "1990-05-20"` 的JSON数据时,Spring会自动将其转换为对应的`LocalDate`对象[^3]。
---
#### 2. @JsonFormat 注解
此注解主要负责控制后端返回给前端的数据序列化行为,即将时间对象按照指定格式转化为字符串形式输出到响应体中[^2]。
##### 示例代码:
```java
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class UserProfile {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date lastLoginTime;
// Getter and Setter methods...
}
```
在这个例子中,假设服务器当前时间为 `Fri Mar 17 14:30:00 CST 2023` ,那么最终返回给用户的 JSON 数据将是如下所示的内容:
```json
{
"lastLoginTime": "2023-03-17 14:30:00"
}
```
需要注意的是,如果未设置时区属性 (`timezone`),则默认采用JVM运行环境所在的时区来执行格式化操作[^3]。
---
#### 主要区别对比表
| 特性 | @DateTimeFormat | @JsonFormat |
|---------------------|-----------------------------------------|------------------------------------------|
| **用途** | 解析请求参数中的日期字符串 | 序列化/反序列化JSON中的日期 |
| **生效范围** | 控制器层 (HTTP 请求绑定阶段) | 响应结果生成阶段 |
| **依赖库** | Spring Framework | Jackson |
以上即是对这两个重要注解功能的一个概括说明。
阅读全文
相关推荐

















