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日

相关文章

  • Spring远程调用HttpClient/RestTemplate的方法

    Spring远程调用HttpClient/RestTemplate的方法 HttpClient 首先需要导入相关依赖,可以使用maven,在pom.xml文件中添加以下依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g…

    Java 2023年5月19日
    00
  • Java实现折半插入排序算法的示例代码

    Java实现折半插入排序算法的示例代码 算法简介 折半插入排序(Binary Insertion Sort)是插入排序算法的一种变体,它通过使用折半查找来减少比较和移动的次数,从而提高算法的效率。算法的时间复杂度为O(n^2)。 示例代码 下面是Java实现折半插入排序算法的示例代码: public static void binaryInsertionSo…

    Java 2023年5月19日
    00
  • jsp中如何实现按下回车键自动提交表单

    在JSP中实现按下回车键自动提交表单,可以采用两种方式来实现: 利用JavaScript 利用form表单属性 下面我将给出详细的步骤以及示例说明。 利用JavaScript 在jsp页面中嵌入JavaScript代码段 <script type="text/javascript"> window.onload=functio…

    Java 2023年6月15日
    00
  • Spring boot项目部署到云服务器小白教程详解

    准备工作 在进行 Spring Boot 项目部署之前,首先需要做好以下准备工作: 一台云服务器(常用的有阿里云、腾讯云、华为云等)。 安装 JDK 环境,一般推荐使用 OpenJDK 或 Oracle JDK。 安装 Maven,用于构建打包项目。 安装 Nginx,用作反向代理服务器。 上传项目代码 可以通过 FTP 或控制台上传本地的 Spring B…

    Java 2023年5月19日
    00
  • 超级全面的PHP面试题整理集合第1/2页

    下面是详细的攻略: 第1/2页页面介绍 这是一篇关于PHP面试题的文章,分成1/2页展示,第一页包含了50道PHP面试题,第二页包含了另外50道PHP面试题。对于准备面试的PHP开发人员来说是一份不错的复习资料。该页面的排版清晰简洁,每个问题答案都有详细的解释,更新时间较新,适合PHP初级和高级开发人员进行参考。 页面内容分析 该页面的内容主要由50道PHP…

    Java 2023年6月15日
    00
  • Java 日期转换详解及实例代码

    Java 日期转换详解及实例代码 在Java中,日期转换经常是很常见的需求,它涉及到将字符串解析为日期对象、将日期对象格式化为字符串等操作。下面将详细介绍Java日期转换的相关知识和实例代码。 日期格式化与解析 Date与String互相转换 将Date对象转换为字符串 Java提供了SimpleDateFormat class用于将Date对象转换为指定格…

    Java 2023年5月20日
    00
  • 使用Java生成jpg与压缩图片为jpg文件的代码示例

    以下是关于使用Java生成jpg并压缩图片为jpg的完整攻略。 1.使用Java生成jpg 要使用Java生成jpg图片,需要使用第三方库——JFreeChart,它可以用于绘制多种类型的图表和图形,其中包括图片。 步骤 引入JFreeChart库: xml <dependency> <groupId>jfree</groupI…

    Java 2023年5月20日
    00
  • 如何建立一个 XML 的开发环境

    建立一个 XML 的开发环境需要以下步骤: 1. 安装 XML 编辑器 现在有很多 XML 编辑器可供选择,比如 Notepad++、Sublime Text、Visual Studio Code、Eclipse 等。推荐使用 Visual Studio Code,因为它是一个免费、跨平台的开源代码编辑器,并且提供了丰富的插件来支持 XML 开发。 安装 V…

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