jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)

Jackson 实体转 JSON 为 NULL 或者为空不参加序列化

为什么要从 JSON 反序列化成实体对象?

在进行 web 开发过程中,前后端数据传输离不开 JSON 字符串。服务器需要将实体对象转成 JSON 字符串返回给前端,而前端也需要将 JSON 字符串转成实体对象进行传入后端。Jackson 可以方便的实现该过程。

实现实体转 JSON

基础转化

首先需要在 pom.xml 中加入 Jackson 相关依赖,例如:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

然后我们可以编写一个实体类:

public class User {
    private String name;
    private int age;

    // 省略 getter 和 setter 方法
}

如果需要将该实体转为 JSON 字符串,可以使用以下代码:

User user = new User();
user.setName("Alice");
user.setAge(18);

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(user);

这样就可以得到如下的 JSON 字符串:

{
  "name": "Alice",
  "age": 18
}

过滤为空的属性

有些情况下,我们会遇到需要过滤为空的属性的需求。这时我们需要使用 Jackson 提供的注解 @JsonInclude,其提供了 4 种策略:

  • Include.ALWAYS:默认策略,序列化时包括 NULL 和空字段。
  • Include.NON_NULL:只有非 NULL 的属性才会被序列化。
  • Include.NON_EMPTY:非 NULL 且不为空(如空集合、空数组)的字段才会被序列化。
  • Include.USE_DEFAULTS:只有属性的值为 primitive 数组(如 int[])时才会被序列化。

示例代码:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
    private String name;
    private Integer age;

    // 省略 getter 和 setter 方法
}

User user = new User();
user.setName("Bob");

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(user);

输出结果为:

{
    "name": "Bob"
}

注意事项

  • 使用 @JsonInclude 时需要注意,其只针对于返回 JSON 或 XML 数据格式的场景,对于返回其他数据格式,@JsonInclude 将不起作用。
  • 将一些字段排除或者设置为 NULL 时,可以使用注解 @JsonIgnore 和 @JsonProperty 来达到目的。

示例演示

下面是另一个示例,演示如何使用 @JsonInclude.Include.NON_EMPTY 策略来忽略空属性。

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class User2 {
    private String name;
    private int age;
    private List<String> hobbies;

    // 省略 getter 和 setter 方法
}

User2 user = new User2();
user.setName("");
user.setAge(0);
user.setHobbies(new ArrayList<>());

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(user);

输出结果为:

{}

在该示例中,name 和 age 属性为空,hobbies 属性是一个空的 List。由于使用了 @JsonInclude.Include.NON_EMPTY 策略,这些空的属性都被过滤掉了,最终得到的结果是一个空的 JSON 对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jackson 实体转json 为NULL或者为空不参加序列化(实例讲解) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 如何使用Jackson和JSON Pointer查询解析任何JSON节点

    如何使用Jackson和JSON Pointer查询解析任何JSON节点 Jackson是一个Java中处理JSON格式的高效库。除了允许你将一个Java对象序列化转化为JSON格式外,还可以用来读取和解析JSON。本文将详细讲解如何使用Jackson和JSON Pointer查询解析任何JSON节点。 JSON Pointer是一种用于在JSON文档中寻找…

    Java 2023年5月26日
    00
  • 使用ObjectMapper把Json转换为复杂的实体类

    使用ObjectMapper把JSON转换为复杂的实体类的方法如下: 1.引入ObjectMapper库 在项目中引入ObjectMapper依赖即可,可以使用Maven或Gradle等构建工具。 Maven: <dependency> <groupId>com.fasterxml.jackson.core</groupId&g…

    Java 2023年5月26日
    00
  • SpringSecurity添加图形验证码认证实现

    下面我来为你讲解SpringSecurity添加图形验证码认证实现的完整攻略。 1. 引入依赖 在pom.xml文件中添加以下依赖: <!–验证码依赖–> <dependency> <groupId>com.github.axolo</groupId> <artifactId>image-ver…

    Java 2023年5月20日
    00
  • 详解springmvc控制登录用户session失效后跳转登录页面

    下面我将详细讲解“详解SpringMVC控制登录用户Session失效后跳转登录页面”的完整攻略,包括具体步骤和示例说明: 背景 在Web应用中,通常会对用户进行登录验证,并在登录成功后将用户的登录状态保存在Session中,当用户操作时,需要检查Session是否过期或失效,若失效或过期需要重新登录。 实现步骤 1. 配置web.xml文件 在web.xm…

    Java 2023年6月16日
    00
  • 简单的一次springMVC路由跳转实现

    下面我将为您详细介绍“简单的一次spring MVC路由跳转实现”的完整攻略。这个过程需要涵盖以下几个方面: 配置web.xml文件 在web.xml文件中配置DispatcherServlet,它是Spring MVC的核心组件,可以将请求分派到相应的控制器中。示例代码: <servlet> <servlet-name>dispat…

    Java 2023年5月16日
    00
  • java 多态实例代码

    我们来讲解一下“java 多态实例代码”的完整攻略。 什么是多态 多态是指同一种行为具有多个不同表现形式或形态的能力,即同一种行为基于不同的对象会产生不同的结果。在Java中,多态是指一个对象的实例在不同的情况下会表现出不同的行为。 多态的实现 在Java中,多态的实现主要有两种方式:继承和接口。通过继承实现多态,我们可以创建一个父类,然后在子类中重写其中一…

    Java 2023年5月30日
    00
  • Spring Boot 项目发布到 Tomcat 服务器的操作步骤

    下面是Spring Boot项目发布到Tomcat服务器操作步骤的完整攻略: 1. 生成war包 在pom.xml文件中添加如下代码 <packaging>war</packaging> 然后在Maven工具栏中执行Package命令,即可生成war包,一般会在target目录下生成。也可以通过命令行的方式执行mvn clean pa…

    Java 2023年6月2日
    00
  • 在Java编程中使用正则表达式

    在Java编程中使用正则表达式是非常常见的任务。下面我将为你详细讲解如何在Java编程中使用正则表达式。 步骤1:导入正则表达式的库 Java内置了支持正则表达式的库,需要在Java源代码中导入库,使用import语句导入java.util.regex.*包。 import java.util.regex.*; 步骤2:创建正则表达式对象 在Java编程中,…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部