📅  最后修改于: 2023-12-03 15:23:19.361000             🧑  作者: Mango
在 Spring Boot 的 REST API 实现中,经常需要用到 JSON 数据格式进行数据传输。而 Jackson 是 Spring Boot 中默认的 JSON 序列化和反序列化库。本文将介绍如何在 Spring Boot 的 REST API 实现中使用 Jackson 进行 JSON 数据的相关处理。
Jackson 是一个用于 Java 序列化和反序列化 JSON 数据的高效、快速和功能丰富的库。它支持 JSON 序列化、反序列化、数据绑定和 JSON 树模型等多种功能。
在使用 Jackson 之前,我们需要在 pom.xml
文件中引入 Jackson 的依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
Jackson 提供了 ObjectMapper
类用于序列化和反序列化 JSON 数据。以下是使用 Jackson 进行序列化和反序列化的示例。
public class User {
private String name;
private int age;
// getter 和 setter 方法省略
}
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("张三");
user.setAge(20);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // 输出 {"name":"张三","age":20}
}
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"张三\",\"age\":20}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println(user.getName()); // 输出 张三
System.out.println(user.getAge()); // 输出 20
}
除了使用 getter 和 setter 方法来访问序列化和反序列化属性以外,我们还可以使用 Jackson 提供的注解。
@JsonProperty
@JsonProperty
注解用于指定 JSON 对象中属性的名称,在反序列化时将 JSON 对象中指定的属性值赋值给 Java 对象中的属性。
public class User {
@JsonProperty("username")
private String name;
private int age;
// getter 和 setter 方法省略
}
public static void main(String[] args) throws Exception {
String json = "{\"username\":\"张三\",\"age\":20}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println(user.getName()); // 输出 张三
System.out.println(user.getAge()); // 输出 20
}
@JsonIgnore
@JsonIgnore
注解用于在序列化或反序列化时忽略注解所标注的属性。
public class User {
private String name;
@JsonIgnore
private int age;
// getter 和 setter 方法省略
}
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("张三");
user.setAge(20);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // 输出 {"name":"张三"}
}
@JsonFormat
@JsonFormat
注解用于指定日期时间格式。
public class User {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
// getter 和 setter 方法省略
}
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("张三");
user.setCreateTime(new Date());
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // 输出 {"name":"张三","createTime":"2022-07-25 14:35:24"}
}
Jackson 提供了许多配置选项,可以根据不同的需求来进行定制化。
ObjectMapper objectMapper = new ObjectMapper()
.configure(SerializationFeature.INDENT_OUTPUT, true) // 格式化输出
.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false) // 序列化时忽略 null 值属性
.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 序列化时忽略 null 值属性
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) // 反序列化时忽略未知属性
.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true) // 反序列化时将空字符串转为 null
.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); // 反序列化时将未知枚举值转为 null
本文介绍了在 Spring Boot 的 REST API 实现中如何使用 Jackson 进行 JSON 数据的相关处理,包括序列化、反序列化、注解和配置等方面。Jackson 提供了丰富的功能和选项,可以根据不同的需求进行定制化。