springmvc7 - JSON

  1. 1. 一、各种Date之间的转换方法
  2. 2. 二、注解解析

一、各种Date之间的转换方法

实体类日期字段:

1
2
3
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone = "GMT+8")
@ApiModelProperty("出生日期")
private Date date;

new Date() 的结果:

birth: “2022-04-26T11:00:29.961+00:00”

问题: 这个时间格式并不是我想要的,想调整为yyyy-MM-dd HH:mm:ss这种常见格式返回到前端。

解决方法: 如下的各种Date之间的转换方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class TimeTest {
public static void main(String[] args) {
Date date = new Date();

// 一、获取当前系统时间和日期并格式化输出:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String dateTime = df.format(date); // Formats a Date into a date/time string.
System.out.println(dateTime); // 2017-09-24 23:33:20

// 二、Date转换为Datetime
long longTime = date.getTime();
Timestamp timestamp = new Timestamp(longTime);
System.out.println(timestamp); // 2017-09-24 23:33:20.655

// 三、String转换为Date
String strTime = "2017-09-24 12:00:01";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = null;
try {
date1 = sdf1.parse(strTime);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date1); // Sun Sep 24 12:00:01 CST 2017

// 四、Date转换为String
Date date2 = new Date();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String str1 = format.format(date2);
System.out.println(str1); // 2017-09-24

// 五、String转化为java.sql.Date
String str2 = "2017-12-01";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date sDate = null;
try {
java.util.Date date3 = sdf2.parse(str2);
sDate = new java.sql.Date(date3.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(sDate); // 2017-12-01

}
}

这里我选用:

1
2
3
4
5
6
Date date = new Date();  

// 一、获取当前系统时间和日期并格式化输出:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String dateTime = df.format(date); // Formats a Date into a date/time string.
System.out.println(dateTime); // 2017-09-24 23:33:20

输出结果:

birth: “2022-04-26 20:13:40”

即可成功解决!

注: mysql数据库时间用datetime类型可以精确到秒, date类型只到年月日。

二、注解解析

1. @JsonFormat:

用法 :为在属性值上 @JsonFormat(pattern=”yyyy-MM-dd”,timezone=”GMT+8”),如果直接使用 @JsonFormat(pattern=”yyyy-MM-dd”)就会出现相差8个小时的情况,因为我们是东八区(北京时间)。所以我们在格式化的时候要指定时区(timezone )

2.@JsonIgnore:

此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性

3.@JsonProperty :

此注解用于属性上,作用是把该属性的名称序列化为另外一个名称。

对属性名称重命名,比如在很多场景下Java对象的属性是按照规范的驼峰书写,但在数据库设计时使用的是下划线连接方式,此处在进行映射的时候就可以使用该注解。

如把实体类的trueName属性序列化为name,@JsonProperty(“name”)。

1
2
@JsonProperty("name") 
private String trueName;

感觉这个注解的作用是:

  1. 前端传参数过来的时候,使用这个注解,可以获取到前端与注解中同名的属性
  2. 后端处理好结果后,返回给前端的属性名也不以实体类属性名为准,而以注解中的属性名为准