📜  在 Spring Boot 的 REST API 实现中使用 Jackson 的 JSON(1)

📅  最后修改于: 2023-12-03 15:23:19.361000             🧑  作者: Mango

在 Spring Boot 的 REST API 实现中使用 Jackson 的 JSON

简介

在 Spring Boot 的 REST API 实现中,经常需要用到 JSON 数据格式进行数据传输。而 Jackson 是 Spring Boot 中默认的 JSON 序列化和反序列化库。本文将介绍如何在 Spring Boot 的 REST API 实现中使用 Jackson 进行 JSON 数据的相关处理。

Jackson 简介

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>
序列化和反序列化 JSON 数据

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 提供了丰富的功能和选项,可以根据不同的需求进行定制化。