关于Can not construct instance of java.util.Date from String value的时间解析报错

webservice接口实施产生的问题

输入精确到年月日时分秒的日期

由于开发过程中需要用到将接受到的精确到年月日时分秒的字符串输入到数据库中,一开始是将pojo类定义为String类型的,然后在对应的mapper中也将对应的类型定义为VARCHAR

在这里插入图片描述

在初期因为接口中没有用到输入到时间类型的数据所以也将接口的MAP定义为了MAP<String,String>

在这里插入图片描述

结果在输入日期的时候,出现了不能将字符串String类型转换成Date类型的错误

在这里插入图片描述

一开始的解决方法是将接受日期的字符串设为Date类型,import的是java.sql.Date,将mapper.xml中的对应字段也做了相应改变

jdbcType="DATE" javaType="java.sql.Date" mode="IN"/>

然后将Map<String,String>类型设置为Map<String,Object>来接收全部类型的对象,这样的结果是:虽然将时间的年月日输入进去了,但时分秒无法输入,具体的错误如下

Can not construct instance of java.util.Date from String value '2020-05-26 14:15:26': not a valid representation (error: Can not parse date "2020-05-26 14:15:26": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

经查阅资料后得知

,java.sql.Date和java.util.Date
java.sql.Date是只支持日期的,不支持时分秒。而java.util.Date是有时间部分的,在sql操作的时候,

resultSet中getDate()默认的类型是java.sql.Date,所以获取的Date类型是没有时间部分的,

setDate(rs.getTimestamp('time')),使用rs.getTimestamp()能够很好的解决这个问题,然后数据库中字段也要修改为timestamp。

 注意实体类中的Date的setDate()一定要是java.util.Date类型。

并且要添加注解

并且给对应接收实体类的pojo添加@JsonFormat注释,pattern格式要与前端一致
在这里插入图片描述

接着将mapper.xml下的也进行修改

在这里插入图片描述

再次测试,时分秒也成功加入了进去😸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值