关于实体类的日期转换中使用@DateTimeFormat、@Pattern()、@JsonFormat

本文详细介绍了在实体类中处理日期格式化的三种注解:@DateTimeFormat、@Pattern 和 @JsonFormat 的使用场景及区别。其中,@DateTimeFormat 主要用于 URL 参数的日期格式化;@Pattern 用于实体属性的正则匹配;@JsonFormat 则用于 JSON 请求体中日期字符串的格式化。

关于实体类的日期转换中使用@DateTimeFormat、@Pattern()、@JsonFormat

注解使用场景
@DateTimeFormat@DateTimeFormat只会在类似@RequestParam的请求参数(url拼接的参数才生效)上生效,如果@DateTimeFormat放到@RequestBody下是无效的。
@Pattern()在实体上对属性进行正则匹配(例如:@Pattern(^\w+$),只能输入由数字、26个英文字母或者下划线组成的字符串)
@JsonFormat在@RequestBody中则可以使用@JsonFormat把传给后台的时间字符串转成Date

简单那来说 ,这三个注解几乎都使用在controller层上,@DateTimeFormat和@JsonFormat用来接收前端请求的body。前者用于将日期转为时间(非@RequestBody下使用),后者在json环境下使用。

而@Pattern()则在实体内变量中进行正则匹配。

所以妄想println的同学,还是写一个日期格式util吧。用simpledateFormat。

### 使用@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 | 以上即是对这两个重要注解功能的一个概括说明。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值