赞
踩
前言:本文主要用于我的个人学习与记录,内容如有谬误欢迎各位大佬斧正。同时,如果您想要快速获取问题的解决方案,请移步至文章底部“解决方案”栏,希望我的经验能对大家有所帮助。
如题,由于项目需求中涉及到数据更新时间的记录,于是我在Mysql中设计了一个datetime类型的字段用于存放该时间,数据库内容如下:
本来最开始我们是相安无事的,但当我在entity层用hutool工具类提供的日期时间对象Datetime承载从数据库获取到的datetime数据时,控制台报错:
2022-08-09 15:04:04.469 ERROR 60464 --- [nio-9090-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'time' of 'class com.ruocheng.springboot.entity.Housing' with value 'Tue Aug 09 16:21:51 CST 2022' Cause: java.lang.IllegalArgumentException: argument type mismatch] with root cause
同时前端表格内容显示为:
观察控制台报错内容,基本可以确定是Hutool提供的Datetime对象和Mysql的datetime类型不匹配造成的问题,但我查了好久的资料也没找到不匹配的根本原因,如果有知道的小伙伴可以评论或者私信告诉我。言归正传,于是我尝试用java.sql里的Date对象承载此数据,这次没有报错,前端表格内容也可以正常显示,但日期格式丢失了分秒时:
在这里我犯的是一个低级错误: java.sql的Date对象仅精确到yyyy-MM-dd也就是年月日,用它来承载datetime类型的数据会丢失后面的时分秒根本不足为奇,这时如果用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 注解强行保持时间格式一致性,也只会显示00:00:00。
于是我又在大佬的建议下尝试用java.sql里的Timestamp对象承载该数据,成功在前端表格正确显示内容:
在这里有一个值得注意的点——在用各种方式保持时间格式一致性时,需要注意时区问题(系统默认的是GMT格林威治时间,而数据库储存的是GMT+8北京时间),如果不注意时区配置的话会出现显示时间与实际时间相差8小时的情况。此处我选择的是@JsonFormat注解,代码如下:
- @Data
- public class Housing {
- private String type;
- private String distract;
- private String table;
- private String sql;
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Timestamp time;
- }
后来经过我的搜索,发现可以使用java.time里面的LocalDateTime对象,该对象能够匹配Mysql的datetime类型,并且由于LocalDateTime与datetime一样是表示的没有时区的日期时间,可以在保持时间格式一致性时无需注意时区配置。最终显示结果与上图一样,我就不额外贴图了。
综上,该问题我总结出了两种解决方案:
代码如下:
- import java.sql.Timestamp;
-
- @Data
- public class Housing {
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Timestamp time;
- }
或者:
- import java.time.LocalDateTime;
-
- @Data
- public class Housing {
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Timestamp time;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。