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改为服务器所在地点的时区就可以了。