@JsonFormat在springboot中的使用方式(精华篇)

文章讲述了在处理JSON请求时,数据通常在POST请求体中,需要使用@RequestBody接收。@JsonFormat注解用于在实体类中进行日期格式化,支持前端到后端和后端到前端的类型转化。当遇到时间显示不一致的问题时,可能是由于时区配置导致,调整Jackson配置中的时区可以解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 只适用于json请求的方式,也就是Post请求

      那我们都知道在post请求时数据是在请求体(requestBody)中的,所以需要再后端在方法参数上使用@requestBody接收参数

2. 不仅适用于前端到后端还适用于后端到前端的类型转化 

在实体类上加上@JsonFormat() 。patter是转化的格式,timezone是时区,我国以北京时间为准所以是东八区。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date lossYear;

@JsonFormat(pattern = "yyyy-MM-dd" ,timezone = "GMT+8")
private Date lossMonth;

3. 类型转化的结果

3.1 前端--->后端 (String--->Date)

前段的时间是以String类型到后端的,而后端的时间类型是Date所以需要去做转化,例如:

      注意: 上面那个红框内的才是转化之后的Date,这种的是可以直接插入数据库的,就会变成正常的时间格式。所以并不是我们在实体类上加了@JsonFormat注解,前端传来的时间就会直接变成了2023-07-05 23:56:23的。

但是如果想看到数字化的时间还需要使用工具类把Date转化成String,比如hutol的DateUtil类

3.2 后端--->前端(Date--->String)

        注意:这个就是我们在给前端返回一个时间,一般会直接使用new Date(),直接返回一个当前时间,但是这个时间是Wed Jul 05 14:30:09 CST 2023的格式,也就是上面前端传过来后端使用@JsonFormat的注解转化的结果,那么就很明确了,把这个CST格式的时间再转化成String类型的给前端就可以了

我们可以使用@JsonFormat转化成String类型给前端 例如:

 这里的2023-07-05格式是在@JsonFormat里的pattern指定格式。

---------------------------------------------------2024/5/20补充----------------------------------------------------//

在外国部署服务之后,甲方发现时间和数据库存的时间不一致。

我首先就是考虑到是部署时nacos的url没有设置为当地时间,后来发现没有问题

我又看了数据库的时区,使用show variables like '%time_zone%'; 得到的time_zone为"+3:00",也就是东三区,数据库和nacos的url时间也对的上。

那就只有一种原因了,在数据库查出来时间之后,得到的应该是Date格式的时间戳,在返回数据之前,会对时间进行格式化,问题就可能出现在时间格式化上,我就去看配置文件jackson的配置,发现用的是“GMT+8”也就是我们国内的时间,所以时间发生了偏移。把jackson的time-zone改为服务器所在地点的时区就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘个Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值