赞
踩
在进行前端向后端传时间参数时,前端竟然报了错误,错误如下所示:
"timestamp":1611115044698,"status":400,"error":"Bad Request","message":"JSON parse error: Cannot deserialize value of type `java.sql.Date` from String \"2021-01-20T03:57:04.000Z\": expected format \"yyyy-MM-dd HH:mm:ss\"; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException:
这个错误之前在后端也出现过。但是明明已经解决了,但是为啥还是为报错呢。我一脸懵逼的对于这个问题没有任何方向。但最终还是直接就在百度上搜索这个错误了,确实也看到了很多人都遇到过这样的错误,但是我尝试了根据他们的博客尝试了很多种方法,结果还是报错。转眼间,一上午过去了,我还在纠结怎么没是生效呢。最后经过下午的折腾,才发现是日期格式的问题,在后端的日期格式上我用了java.sql.Date,后来我改成了Date就不报错了,那究竟是什么原因导致了这个错误呢,请继续阅读,答案就在下方…
简单来说,日期为java.sql.Date期运行结果就是只有年月日没有时分秒。但是在前端传过去的日期格式为“yyyy-MM-dd HH:mm:ss” ,所以就导致了格式转化失败的错误。但如果用Date就不会只有年月日,会将前端传过去的日期格式全部显示出来。
关于java.sal.Date包下给出三个与数据库相关的日期时间类型:
Date : 表示日期,只要年月日,没有时分秒。(总结为会丢失时间)
Time:会丢失日期
Timestamp:表示时间戳,有年月日时分秒,以及毫秒
java日期类型用Date时,注意引入的包是否正确:
Date引入的包如下:
import java.util.Date;
在此之前我也用尝试过用Date,但是爆红,不能引入期依赖,也尝试过用DateTime因为觉得是日期时间,但是都不能引入到代码中。但是这次竟然引入成功了,究其原因是包导入的问题。所以在引入任何东西前一定要注意其导入的包是否正确。
引起这错误,之前我也写过一篇博客。是因为数据库表数据类型设计的问题。部分字段用了bit类型,结果前端传来的字段太长了也会导致报错,这时候把数据类型或者其长度修改下即可。还有就是bit在实体层中最好用int类型,不然容易报错。大家可以查下关于int和bit的区别。
在报错时,自己没有通过多方面的去思考来进行解决问题。在通过直接搜索报错问题还是不能解决此问题时,应该根据问题去定义是什么地方出错了,不该纠结于后端接口测通了一定没有隐患的错误。可以先在前端输入看输出格式是否正确,最后前后端一条线调错时,看问题是否在后端也报错。如果报错,迅速根据报错信息定位,之后直接去查java.sql.Date即可找到解决问题的源头,而不是就只抓住报错信息一味百度百度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。