前后端之间进行日期的传送

写作灵感

在日常的开发中,涉及到前后端交互比较麻烦的内容只有两个,一个是文件的交互,再一个就是日期的交互了。在之前的文章中,我已经介绍了如何发送图片给后端与后端如何让前端访问到图片(图片便是文件的一种)。恰巧最近开发中遇到了关于日期的传送问题,因此打算写一篇文章细说一下前后端的日期传送。

日期传送的复杂原因

 在前后端交互时,日期之所以复杂是因为其多变的形式。同一个时间可以用时间戳表示,也可以用"2024-2-14 14:01:55"这样的形式表示,此外还有许多其他的表达形式这里不再作过多赘述。但需要明白的一点时,在后台我们可以将时间以时间戳的形式存取,但是前端展示是万万不能这一做的,例如,当你的页面上显示时间为1601245741...这一一串数字,你是不可能知道当前的时间的。

前后端接口统一格式

大家需要注意的是,我这里写的是前后端的接口统一格式,并不是说整个项目的时间都统一使用这种格式。因为时间在数据库内的存储一般都是date类型的,这样方便我们以后进行某些操作,比如比较时间的先后。

大家千万不要图方便,在整个项目中都把时间用字符串进行存储。

我目前的格式为,前后端在传递时间时使用JSON字符串,而在服务器与数据库中使用date类型进行存储。之所以在前后端传递时间时使用字符串,是因为前端最主要的目的就是展示最终的结果,而时间的最终结果就是类似于"2024-2-14 14:01:55"这样的一个字符串。而在前后端统一接口形式时,我们就可以用到@JsonFormat()这个注解,具体使用如下:

0c6c8bd74ee34580a06aa477753e7f4a.png

将其作用于对应的日期属性上后,该属性就将以此种格式进行前后端的传送。这也就意味着,从后端发往前端的日期将变为"yyyy-MM-dd HH:mm:ss" 的格式,同时,前端向后端传送的日期格式也必须是一个"yyyy-MM-dd HH:mm:ss"格式的字符串。这时候,一般情况下,在进行时间传送时,只会出现三种情况,传送的时间正常被接收,传送的时间一直为null与服务器报错。正常被接收的情况不再进行赘述,接下来为大家解答可能出现的另外两种情况及其出现的原因。

统一格式后传送时间可能出现的问题

情况一:传送的时间一直为null

51f4ee6317a9472199c77e5a06041bd6.png

 前端发送请求界面

 fea449a4752b470684cddedbad2037eb.png

后端打印界面

大家其实可以很容易发现,我的前台传送的endDate根本就是一个空串,而空串是一个无效的时间,因此后台打印为null。所以,大家如果接收的时间一直为null,可以尝试检查一下自己前端是否传递了无效的时间。

情况二:后台报JSON解析错误

ce57691aec92429e86dd2ca345070b6f.png

前端发送请求界面

958e06d50a4f4b1d924853b1e69a3775.png

 后端打印界面

这次可以看到,后端爆出了JSON parse error。这是由于前端传递的参数"2024-2-14/14:32:15"不符合前后端约定好的"yyyy-MM-dd HH:mm:ss"格式,无法进行转换。

前端如何正确的传递时间

我知道,大家一般不会犯故意在获取到的时间里面加一个'/'的错误。但是有时候,我们在传递时间参数的时候,可能默认觉得把自己的时间放在new Date()内构造出一个对象,这个对象再调用一些方法就能生成指定格式的时间字符串了。其实这并不一定正常,最为正确的做法如下:

e02f84b1665942e4aeeca07ba5a4f8a0.png

前端发送请求界面 

28b0edf936b94b87b5d8c049837aa857.png

后端打印界面 

这次,大家可以看到了正确的时间。但这里有一点必须要注意, 或许你会问,前端传来的时间为"2024-1-3 14:41:41",而后端最后打印的虽然是这个时间点,却不是这种格式。这里,我必须要重申的是,我们对于时间格式的约束仅限于前后端接口的约束,当后端拿到指定格式的时间后,便已经将其转换为了Date类型的数据,因此你看到的打印结果已经不再是一个字符串了。

总结

传送时间最重要的就是前后端要约定好指定的格式,约定好格式以后,一定要严格按照这个格式进行传递。同时,后端在存储时间时,一定不要使用字符串存储,最好使用Date类型。而前后端在传递时,建议使用指定格式的JSON字符串进行,这样便于前端的直接展示。

感谢大家的观看,如有不足之处,还望指正。最后,希望大家点个关注收藏吧,后续还会继续更新前后端的相关内容。

 

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

易烊子豪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值