解决日期转换异常:Error attempting to get column ‘test_time‘ from result set. Cause: java.sql.SQLFeatureNotSu

一、Error attempting to get column 'test_time' from result set. Cause: java.sql.SQLFeatureNotSupported 

在原因:前端传入时间日期字符串发送报错

出现错误的原因:因为我的表的test_time类型为DateTime,通过mybatis-plus代码生成器生成的是LocalDateTime,而Java8里面新出来了一些API,LocalDate、LocalTime、LocalDateTime ,但是在默认的情况下,在mybatis里面不支持java8的时间、日期。

上网查找解决办法

更改javabean类中的类型,改为Date类型

修改后

重新测试有报了一个新异常

二、错误:JSON parse error: Cannot deserialize value of type `java.util.Date` from String "2024-08-30T03:15:23.000Z": not a valid representation......

从异常信息来看,可能是日期型数据被序列化为JSON之后,无法转换成java.util.date类型,需要显式的指定一个日期转换格式。将数据获取以后封装到实体类中的时候,就会变成英文的时间格式(Wed Jul 27 02:26:43 CST 2022),而不是yyyy-MM-dd HH:mm:ss格式的时间

解决办法:在对应的bean日期属性上增加注解 @JsonFormat 注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")

解释一下:

  • shape = JsonFormat.Shape.STRING:这个属性指定了字段在 JSON 中的表现形式。在这个例子中,它被设置为 STRING,意味着该字段在 JSON 中将表示为一个字符串。Jackson 提供了几种不同的形状(Shape),包括 STRINGNUMBER(对于时间戳)和 OBJECT(对于更复杂的日期时间表示)。

  • pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'":这个属性定义了日期时间字符串的格式。在这个例子中,格式遵循了 ISO 8601 标准,但需要注意的是,'Z' 在这里被直接包含在格式字符串中,这实际上可能不是最佳实践,因为它通常表示 UTC 时间(协调世界时),并且应该通过其他方式(如 timezone 属性)来处理时区问题。正确的 UTC 时间表示通常不包括 'Z' 作为字符串的一部分,而是由库自动处理。如果你确实需要在字符串中包含 'Z',那么这样是可以的,但请注意它将被视为普通字符而不是时区指示符。

  • timezone = "UTC":这个属性指定了用于格式化日期时间的时区。在这个例子中,它被设置为 UTC,意味着无论原始日期时间是什么时区,它都将被转换为 UTC 时间并相应地格式化。这对于需要确保时间一致性的跨时区应用程序特别有用。

 但是这样页面展示的日期时间格式就是2024-08-30T03:15:23.000Z的,是因为前端没有设置时间日期的显示在输入框中的格式

三、解决显示时间格式带"T" 、"Z"

将前端用到的时间日期选择器添加 value-format="yyyy-MM-dd HH:mm:ss" 属性。

再将后端实体类里的私有变量上的注解@JsonFormat 里的类型改一下,将前后端类型匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值