hooyantsing's Blog

青铜篇_P13_jackson-JSON数据格式的处理

字数统计: 641阅读时长: 3 min
2020/07/14

jackson-JSON数据格式的处理

20年全新-Spring Boot 2.x从青铜到王者之青铜篇-打造精品中的精品-程序员-编程-架构师-SpringBoot

@JsonFormat

pattern 时间格式

timezone 时区

用于对 JavaBean 时间域格式化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

@Data
public class Article {
private Long id;
private String author;
private String title;
private String content;
@JsonFormat(pattern = "yyyy/MM//dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
}

@JsonPropertyOrder

value 改变域排列顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;

import java.util.Date;

@Data
// content 位于第一位,title 位于第二位,之后才从 id 向后排列。
@JsonPropertyOrder(value = {"content","title"})
public class Article {
private Long id;
private String author;
private String title;
private String content;
private Date createTime;
}

@JsonProperty

value 别名

在输出时,以注解的值为准,相当于给域换了一个名字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Date;

@Data
public class Article {
private Long id;
@JsonProperty("auther")
private String author;
private String title;
private String content;
private Date createTime;
}

@JsonInclude

如果返回字段为空,即Null,则忽略这个字段,不返回这个字段值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.util.Date;

@Data
public class Article {
private Long id;
private String author;
private String title;
// 如果返回字段为空,即Null,则忽略这个字段,不返回这个字段值
@JsonInclude(JsonInclude.Include.NON_NULL)
private String content;
private Date createTime;
}

@JsonIgnore

忽略字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.Date;

@Data
public class Article {
//忽略字段,比如一些敏感数据,不希望Json响应到前端,用此注解忽略
@JsonIgnore
private Long id;
private String author;
private String title;
private String content;
private Date createTime;
}

对象序列化Json,Json反序列化对象的方法

使用 ObjectMapper 对象。

.writeValueAsString 方法将对象序列化成Json

readValue 方法将Json序列化成对象

注意: JavaBean类必须加上 @NoArgsConstructor 无参构造方法和 @AllArgsConstructor 全参构造方法两个注释,否则报错。

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
package xyz.hooy.demo.bronze.p13;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.util.Date;

public class JacksonTest {
@Test
void contextLoads() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//Object
Article article = Article.builder()
.id(1L)
.author("Hooy")
.content("从青铜到王者")
.createTime(new Date())
.title("t1").build();

//Object -> Json
String json = mapper.writeValueAsString(article);
System.out.println(json);

//Json -> Object
Article articleObject = mapper.readValue("{\"id\":1,\"author\":\"Hooy\",\"title\":\"t1\",\"content\":\"从青铜到王者\",\"createTime\":1594733516341}",Article.class);
System.out.println(articleObject.toString());
}
}
CATALOG
  1. 1. jackson-JSON数据格式的处理
    1. 1.0.1. @JsonFormat
    2. 1.0.2. @JsonPropertyOrder
    3. 1.0.3. @JsonProperty
    4. 1.0.4. @JsonInclude
    5. 1.0.5. @JsonIgnore
  2. 1.1. 对象序列化Json,Json反序列化对象的方法