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日

相关文章

  • Java8新特性Optional类及新时间日期API示例详解

    Java8新特性Optional类及新时间日期API示例详解 Java8引入了新的特性Optional类和新的时间日期API,本文将从简介、Optional类、新时间日期API两个方面详细讲解这些新特性,并通过两条示例来进一步说明。 简介 Java8新特性是对Java语言本身的更新,涉及到Java SE库的更新,这意味着我们能够在开发程序时更轻松地编写可读性…

    Java 2023年5月20日
    00
  • jsp传值本地无乱码测试机出现乱码问题解决

    下面我将详细讲解“jsp传值本地无乱码测试机出现乱码问题解决”的完整攻略。 一、问题描述 当我们在本地运行jsp页面传输值,并将页面上传至测试机运行时,有时会出现中文乱码的问题。这是因为本地和测试机的编码不一致所造成的。 二、解决方法 配置jsp页面编码方式 在jsp页面中,加入以下代码进行页面编码的设置。以UTF-8编码方式为例: <%@ page …

    Java 2023年6月15日
    00
  • JAVA实现301永久重定向方法

    Java实现301永久重定向的方法需要在服务器端进行配置。下面是具体的步骤: 1. 配置web.xml文件 在web.xml文件中添加以下代码,该代码将对匹配的URL进行永久重定向 <web-app> <error-page> <error-code>301</error-code> <location&…

    Java 2023年6月15日
    00
  • Java构造函数通透理解篇

    Java构造函数通透理解篇 什么是构造函数 构造函数是一种特殊的函数,用于在创建对象时进行初始化操作。在Java语言中,构造函数名称必须与类名称完全一致,且没有返回值类型,因为构造函数的返回值类型就是类本身。 构造函数的作用 构造函数的主要作用是用于在创建对象时进行初始化操作,它会被自动调用,并设置类的初始状态。在构造函数中,可以进行对对象的属性进行初始化,…

    Java 2023年5月26日
    00
  • 利用session实现简单购物车功能

    利用session实现简单购物车功能的完整攻略如下: 1. 设置session 在用户第一次访问网站时,需要在服务器端设置session来实现购物车的功能。在PHP中,可以使用$_SESSION变量来操作session。比如: session_start(); // 启动session,建议放在文件开头 // 判断购物车是否已经存在于session中,如果不…

    Java 2023年6月15日
    00
  • 详解maven配置多仓库的方法示例

    下面是详解maven配置多仓库的方法示例的攻略。包含以下内容: 配置的基本概念 配置方式示例一:配置私有maven仓库 配置方式示例二:配置多个maven中心仓库 配置的基本概念 Maven的依赖系统是基于仓库的概念实现的,即Maven插件会到某个公共或私有仓库中查找外部依赖包,比如我们常见的jcenter、mavenCentral仓库等。从而减少了开发者的…

    Java 2023年5月19日
    00
  • MyEclipse CI 2019怎么安装?MyEclipse CI 2019.4安装激活方法+使用教程

    以下是“MyEclipse CI 2019怎么安装?MyEclipse CI 2019.4安装激活方法+使用教程”的完整攻略。 安装MyEclipse CI 2019 首先进入MyEclipse官网,点击下载按钮,选择MyEclipse CI 2019版本进行下载。 安装过程较为简单,按下一步指示即可。注意在安装过程中选择想要安装的插件。 示例说明:选择安装…

    Java 2023年6月15日
    00
  • Java中BM(Boyer-Moore)算法的图解与实现

    Java中BM(Boyer-Moore)算法的图解与实现 前言 本文主要介绍在Java中实现BM算法。BM算法是一种高效的模式匹配算法,其核心思想是,对于模式串的每个字符,在匹配串中寻找该字符时,优先从模式串的尾部开始匹配,以减少匹配步骤。本文将详细介绍BM算法的流程,并提供两个示例以帮助读者更好地理解该算法。 算法流程 计算字符偏移量表 字符集假设有m个字…

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