前端选择日期后,传给后端的数据少了一天

文章讲述了前端在获取后端日期数据时遇到一天之差的问题,通过调整ElementUI日期选择器的value-format属性和理解时区设置,解决了这个问题。作者对`@JsonFormat`和`@DateTimeFormat`的使用以及它们在日期处理中的作用提出了疑问。
摘要由CSDN通过智能技术生成

问题:

前端打印获取到的数据

后段得到的数据

问题是两者之间少了一天(附上我该字段的代码date类型)

解决问题过程:

尝试的第一个方法是,将数据库连接配置中添加

url: jdbc:mysql:///petmed&serverTimezone=GMT+8

失败!!!

尝试第二个方法是,在spring配置中,添加

jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd

失败!!!

总结前两个方法的共同点,那就是出现前后端差一天的原因就是时区的问题,把时区改为东八就行,但是这并不能解决我的问题。

尝试方法三,在前端中添加以下属性

value-format="yyyy-MM-dd" 

我使用的是element组件里的时间选择器,增加后代码如下

<el-date-picker v-model="factoryForm.createTime" value-format="yyyy-MM-dd" 
        :label-width="formLabelWidth" type="date" placeholder="选择日期" prop="createTime">
        </el-date-picker>

至此,问题解决。

问题虽然解决了但是留下了疑问,这是因为看到这位大佬

1.@JsonFormat 和 @DateTimeFormat 用于String类型对Date类型的封装
2.@JsonFormat t同时会对后端数据传给前端Json字符串日期截取,
	按照其 pattern 属性定义截取
3.前端JSON字符串yyyy-MM-dd HH:mm:ss 类型想要封装给LocalDateTime类型
	需要用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
4.Date类型前端不能直接传 yyyy-MM-dd HH:mm:ss 格式字符串,
	但是可以直接传 yyyy-MM-dd 格式,数据库会存储带补全的时分秒数据

这应该是在实体类定义的时候,直接写@JsonFormat注解就行了的,但是为什么还要前端改呢?

同时,看到官方文档里写着

如果不选的话就是date对象,我数据库也是date类型,所以为什么还要加这个属性才能改正?

参考文章

ElementUI使用日期选择器时时间少一天解决方法-CSDN博客

网上关于解释 @JsonFormat 和 @DateTimeFormat 的坑_jsonformat timezone gmt+8的坑_收藏=学会了的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值