写在前面
在写web项目的时候经常会遇到后端返回的MySQL日期数据(date)
类型在前端显示不正确的情况,有的时候会出现一串数字的时间戳,有的时候显示为日期晚了一天。
这是因Json给前端返回数据的时候格式问题造成的
解决方法
其实总结起来就是一句话在Model部分对于JavaBean定义参数类型的时候,规定日期格式
Tips:
注意区分Jackson和FastJson以及其他的Json格式类型
Jackson类型的Json
注意区分Jackson和FastJson以及其他的Json格式类型,不同Json注解不同
如何在向前端返回数据的时候直接使用return 某一个对象
那一般都会以Jackson的Json类型来向前端返回,例如:
@GetMapping("getNews")
public List<News> getNews(int num) {
List<News> news_list = projectService.getNews(num);
return news_list;
}
那么对于这种情况,我们在News类中,就要在时间类型的变量上加上注解
这里Timestamp类型对应的是Mysql中的datetime类型(精确到时分秒),同时注解中加上时区,解决可能的日期差一天的问题。
Date类型对应Mysql中的date类型(精确到天),同时注解中加上时区,解决可能的日期差一天的问题。
//Timestamp举例,对应Mysql中的datetime
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="Asia/Shanghai")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp time;
//Date,对应Mysql中的date
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "Asia/Shanghai")
private Date date;
FastJson类型的Json
注意区分Jackson和FastJson以及其他的Json格式类型,不同Json注解不同
在这个示例中,后端给前端返回的数据是先转为fastjson,再return的,那就不能使用jackson的注解格式,而要使用fastjson提供的注解。fastjson一般不会有时区导致的日期错误问题
@GetMapping("getNewsTopWord")
public String getNewsTopWord(int num) {
String jsonOutput = JSON.toJSONString(projectService.getNewsTopWord(num));
return jsonOutput;
}
同样,在时间类型的变量上加上注解
这里Timestamp类型对应的是Mysql中的datetime类型(精确到时分秒)。
Date类型对应Mysql中的date类型(精确到天)。
//Timestamp举例,对应Mysql中的datetime
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp time;
//Date,对应Mysql中的date
@JSONField(format = "yyyy-MM-dd")
private Date date;
总结
注意区分Jackson和FastJson以及其他的Json格式类型,不同Json注解不同