前端报错JSON parse error: Cannot deserialize value of type `java.sql.Date`

本文讲述了前端向后端传递时间参数时遇到`JSONparseerror`,解决过程发现是由于java.sql.Date与预期的日期格式不符。作者揭示了java.sql.Date与Date的区别,以及包导入和数据库表数据类型对问题的影响,并提供了解决方案。
摘要由CSDN通过智能技术生成

在进行前端向后端传时间参数时,前端竟然报了错误,错误如下所示:

"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和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即可找到解决问题的源头,而不是就只抓住报错信息一味百度百度。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值