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日

相关文章

  • Java Apache POI报错“NullArgumentException”的原因与解决办法

    “NotOfficeXmlFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Office Open XML格式,则可能会出现此异常。例如,可能会尝试读取旧版的Microsoft Office文件或尝试读取其他文件类型。 以下是两个实例: 例1 如果文件格式错误,则可以尝试使用正确…

    Java 2023年5月5日
    00
  • Java编程中10个最佳的异常处理技巧

    Java编程中10个最佳的异常处理技巧 在Java编程中,异常处理时至关重要的。正确的处理异常,可以避免程序崩溃、提高程序可靠性和可维护性。本文将介绍10个最佳的Java异常处理技巧。 1. 使用try-catch语句捕获异常 try-catch语句可以捕获异常,并对异常进行处理或记录。以下是示例代码: try { // 可能抛出异常的代码 } catch …

    Java 2023年5月27日
    00
  • 如何将maven源改为国内阿里云镜像

    下面是将Maven源改为国内阿里云镜像的完整攻略。 修改Maven配置文件 Maven 的配置文件 settings.xml 存放在 Maven 安装目录下的 conf 目录中。我们需要修改该配置文件来指定使用阿里云镜像。使用文本编辑器打开该文件,找到 <mirrors> 标签,添加如下配置: <mirror> <id>a…

    Java 2023年5月20日
    00
  • 为什么Java 8取消了永久代?

    为什么Java 8取消了永久代? 在Java 8之前,Java虚拟机有一块非堆内存称为永久代(PermGen),它专门用于存放类的元数据信息、常量池、方法区和静态变量等内容。由于永久代有一定的内存限制,并且它是基于线性扫描和GC Roots扫描来进行垃圾回收的,所以在大量类的场景下容易出现“永久代溢出”的问题。此外,永久代和堆内存的内存管理方式不同,会导致被…

    Java 2023年5月11日
    00
  • jsp中实现带滚动条的table表格实例代码

    下面我将为你详细讲解jsp中实现带滚动条的table表格的完整攻略。 1.使用div包裹table实现 第一种方法是使用div包裹table实现,步骤如下: 1.1 编写HTML结构 在jsp页面中,先编写HTML结构: <div id="table-wrapper"> <div id="table-scrol…

    Java 2023年6月15日
    00
  • springboot项目打包成jar包的图文教程

    下面是关于“springboot项目打包成jar包的图文教程”的详细攻略。 准备工作 确保你已经安装了jdk,可以通过以下命令来检查jdk的版本: java -version 安装maven,可以通过以下命令来检查maven的版本: mvn -v 确保你已经使用springboot来搭建了一个项目,并且该项目可以通过以下命令来启动: mvn spring-b…

    Java 2023年5月19日
    00
  • Java实现批量导出导入数据及附件文件zip包

    下面我来详细讲解一下“Java实现批量导出导入数据及附件文件zip包”的完整攻略。 一、准备工作 1.引入相关依赖 我们需要引入以下依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</ar…

    Java 2023年5月19日
    00
  • 利用Java实现文件锁定功能

    接下来我将为你详细讲解如何利用Java实现文件锁定功能。 什么是文件锁定 文件锁定是指在对文件进行读取、修改等操作时,防止其他程序或者线程对同一文件进行操作,从而避免文件被多个程序同步修改而产生数据不一致的情况。 文件锁定的实现原理 文件锁定的实现原理是通过创建文件锁的方式来阻止其他程序访问被锁定的文件。在Java中,可以通过FileChannel类创建文件…

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