问题前言
数据库字段存放的是Date类型,如果Java实体类也使用Date类型,不管是java.sql.Date还是java.util.Date,这样用Mybatis查询就会自动转换成unix long型时间戳
如2022-09-20会转为166xxxxxxx的long类型数据
、
在前后端可能发生的格式变换:
1.数据库date——mybatis查询的结果
Date——long
2.mybatis——mvc封装到实体类,如
public List<Inv> findInv() {
List<Inv> list=invservice.findAllInv();
System.out.println(list);
return list;
}
pojo类的date会变成英文格式,如 Date=Sat May 28 00:00:00 CST 2022,
另,通过@JsonFormat(pattern="yyyy-MM-dd")可格式化pojo的时间
3.mvc方法return到前端(如layui),现实的和pojo格式一样(@JsonFormat注解后会显示如2022-01-01)
4.前端通过json传到后端,正常情况下mvc会正确接收json
但是注意,此时可能因为字段大写问题(导入jackson包的情况下)导致实际上json每个字段变成两个字段,一个大写一个小写,如
data": [
{
"Date": "2022-05-27",
"date": 1653667200000,
"category": "光纤",
"remark": "",
"specification": "CK-10",
"orders": 10,
"balance": 157,
"id": 1,
"Category": "光纤",
"Specification": "CK-10",
"Orders": 10,
"Balance": 157,
"Remark": ""
},
此时如果自定义了Dateconvert,其只会转换小写的字段(大写的是本该消失的,因为@JsonProperty注解才得以存在,而小写的是long的形式,所以无法转换)
解决方法看关于用jackson的@JsonProperty注解属性名,会多出一个字段的问题_茉莉清香压九秋的博客-优快云博客
最后最简单的方法,将Java实体类中的Date类型属性改为String类型就会自动转换为格式化好的字符串