Jackson库中JsonInclude的使用

简介

        JsonInclude是 Jackson 库(Java 中用于处理 JSON 数据的流行库)中的一个注解。它用于控制在序列化 Java 对象为 JSON 时,哪些属性应该被包含在 JSON 输出中。这个注解提供了多种策略来决定属性的包含与否,帮助减少不必要的数据传输,提高性能并且优化 JSON 数据的结构。

有几个默认策略:

策略介绍:

ALWAYS

        这是默认的包含策略。在使用JsonInclude.Include.ALWAYS时,无论 Java 对象中的属性值是什么状态,都会将其包含在序列化后的 JSON 数据中。例如,对于一个 POJO(Plain Old Java Object)类:

import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {@JsonInclude(JsonInclude.Include.ALWAYS)private String name;@JsonInclude(JsonInclude.Include.ALWAYS)private Integer age;// 构造函数、getter和setter方法省略
}

        当你将MyObject的一个实例序列化为 JSON 时,nameage这两个属性都会出现在 JSON 字符串中,即使namenull或者agenull。比如,如果namenull,序列化后的 JSON 可能是{"name":null,"age":null}。

NON_NULL

        采用JsonInclude.Include.NON_NULL策略时,只有属性值不为null的属性才会被包含在序列化后的 JSON 数据中。例如:

import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {@JsonInclude(JsonInclude.Include.NON_NULL)private String name;@JsonInclude(JsonInclude.Include.NON_NULL)private Integer age;// 构造函数、getter和setter方法省略
}

        如果namenull,而age10,那么序列化后的 JSON 将是{"age":10}。这种策略可以有效减少 JSON 数据的大小,避免传输不必要的null值。

        这个可以用于给前端返回对象时,加在类上,就可以去掉不需要的空属性,这也就不用再新建类了,可以复用已有类。

NON_ABSENT

        这个策略在某些特定的场景下使用,比如处理一些可能存在 “缺席” 概念的数据结构。不过在标准的 Jackson 使用中,这个策略相对不太常见。它通常用于更复杂的对象层次结构中,当一个子对象被认为是 “缺席” 而不是null时,不包含该子对象相关的属性。

NON_EMPTY

        对于JsonInclude.Include.NON_EMPTY,当属性是集合类型(如ListSetMap等)或者字符串类型时,只有在集合不为空或者字符串长度大于 0 时,该属性才会被包含在 JSON 数据中。例如:

import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.ArrayList;
import java.util.List;
class MyObject {@JsonInclude(JsonInclude.Include.NON_EMPTY)private List<String> hobbies;// 构造函数、getter和setter方法省略
}

        如果hobbies是一个空的ArrayList,那么在序列化MyObject时,hobbies属性不会出现在 JSON 数据中。但如果hobbies包含元素,如["reading","swimming"],则会包含在 JSON 中,像{"hobbies":["reading","swimming"]}

NON_DEFAULT

        当使用JsonInclude.Include.NON_DEFAULT时,只有属性值与默认值不同的属性才会被包含在 JSON 数据中。对于基本数据类型,它们都有默认值(如int默认值是 0,boolean默认值是false等)。例如:

import com.fasterxml.jackson.annotation.JsonInclude;
class MyObject {@JsonInclude(JsonInclude.Include.NON_DEFAULT)private int count;// 构造函数、getter和setter方法省略
}

        如果count的值为 0(int的默认值),序列化MyObject时,count属性不会出现在 JSON 数据中。但如果count5,则会包含在 JSON 中,如{"count":5}

CUSTOM

   JsonInclude.Include.CUSTOM允许你定义自己的包含规则。这通常需要实现自定义的过滤器或者使用 Jackson 提供的一些高级过滤机制。例如,你可以创建一个自定义的ValueFilter来决定哪些属性应该被包含,具体实现可能涉及实现接口并配置到ObjectMapper中,这是一种比较灵活但相对复杂的方式,用于处理特殊的序列化需求。

USE_DEFAULTS

        这个策略主要用于在继承场景或者一些复杂的配置中,恢复到默认的包含策略。它会按照 Jackson 库默认的方式来处理属性的包含,通常在覆盖了一些全局设置后,需要在某些特定情况下重新使用默认行为时使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX:简介、使用场景、常见问题及对比其他框架分析

1. JavaFX 简介 1.1 什么是 JavaFX&#xff1f; JavaFX 是一个基于 Java 的 GUI 工具包&#xff0c;支持创建桌面和互联网应用。它通过 Scene Graph&#xff08;场景图&#xff09;模型渲染 UI 元素&#xff0c;并采用声明式编程风格。自 JDK 11 起&#xff0c;JavaFX 被移除…

88页精品PPT | 某电信集团大数据平台建设方案技术交流

这份PPT文档是关于某电信集团大数据平台建设的技术交流方案&#xff0c;内容涵盖了现状分析、规划思路、产品设计、成功案例以及干货附录等多个部分。文档详细介绍了集团大数据平台的建设背景、技术特点、面临的挑战和痛点&#xff0c;以及具体的技术架构和实施策略。还包括了数…

Java设计模式笔记(一)

Java设计模式笔记&#xff08;一&#xff09; &#xff08;23种设计模式由于篇幅较大分为两篇展示&#xff09; 一、设计模式介绍 1、设计模式的目的 让程序具有更好的&#xff1a; 代码重用性可读性可扩展性可靠性高内聚&#xff0c;低耦合 2、设计模式的七大原则 单一职…

在使用PCA算法进行数据压缩降维时,如何确定最佳维度是一个关键问题?

一、PCA算法的基本原理 PCA算法的核心思想是通过正交变换&#xff0c;将一组可能相关的变量转换成一组线性不相关的变量&#xff0c;称为主成分。这组主成分能够以最小的信息损失来尽可能多地保留原始数据集的变异性。具体来说&#xff0c;PCA算法包括以下几个步骤&#xff1a…

shodan(7)

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

三维地形图计算软件(三)-原基于PYQT5+pyqtgraph旧代码

最先入手设计三维地形图及平基挖填方计算软件时&#xff0c;地形图的显示方案是&#xff1a;三维视图基于pyqtgraph.opengl显示和二维视图基于pyqtgraph的PlotWidget来显示地形地貌&#xff0c;作到一半时就发现&#xff0c;地形点过多时&#xff0c;将会造成系统卡顿(加载时主…

从入门到精通数据结构----四大排序(上)

目录 首言&#xff1a; 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾&#xff1a; 首言&#xff1a; 本篇文章主要介绍常见的四大排序&#xff1a;交换排序、选择排序、插入排序、归并排…

集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解

1、 Queue与Deque的区别 在研究java集合源码的时候&#xff0c;发现了一个很少用但是很有趣的点&#xff1a;Queue以及Deque&#xff1b; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用&#xff0c;但是一直都不知道Queue的作用&#xff0c;于是就直接官方…

Qwen2.5-7B大模型微调记录

Qwen2.5-7B大模型微调记录 研究需要&#xff0c;需要搞一个大模型出来&#xff0c;没有太多的时间自己训练&#xff0c;准备用现成的开源大模型&#xff0c;然后结合研究方向进行微调 前前后后折腾大半个月&#xff0c;总算做完了第一个微调的大模型&#xff0c;模型基于阿里…

Spring Boot 开发环境搭建及示例应用

文章目录 1. 准备开发工具安装 JDK安装 IDE安装 Maven 2. 创建 Spring Boot 项目使用 Spring Initializr 创建项目导入项目到 IDE 3. 编写代码主类创建控制器创建实体类创建仓库接口创建服务类创建控制器 4. 配置文件5. 运行应用程序6. 测试应用程序7. 调试与优化8. 部署应用 1…

CentOS Docker 安装

CentOS Docker 安装 1. 简介 CentOS 是一个基于 Red Hat Enterprise Linux (RHEL) 的开源操作系统&#xff0c;广泛用于服务器环境。Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的…

docker 的各种操作

Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法&#xff1a; 解决方法&#xff1a;将 /etc/docker/daemon.json 中的"registry-mirrors"的内容换成如下内容 { "registry-mirrors": [ "…

在xml的sql的子查询中使用row_number over之后再在mapper的接口层传入Page对象实现分页功能,出现Bug

1.报错信息复现&#xff1a; Mapper接口&#xff1a; List<UserInfo> queryUserPage(Param(“vo”) UserQury query,Page<UserInfo> page); UserQury 类中的状态字段&#xff1a; ApiModelproperty(“状态”) private String status; Xml中sql如下&#xff1…

动态规划之背包问题

0/1背包问题 1.二维数组解法 题目描述&#xff1a;有一个容量为m的背包&#xff0c;还有n个物品&#xff0c;他们的重量分别为w1、w2、w3.....wn&#xff0c;他们的价值分别为v1、v2、v3......vn。每个物品只能使用一次&#xff0c;求可以放进背包物品的最大价值。 输入样例…

蓝桥杯模拟题不知名题目

题目:p是一个质数&#xff0c;但p是n的约数。将p称为是n的质因数。求2024最大质因数。 #include<iostream> #include<algorithm> using namespace std; bool fun(int x) {for(int i 2 ; i * i < x ; i){if(x % i 0)return false;}return true; } int main() …

JavaFX 表格组件详解及案例

1. 表格组件简介 TableView&#xff1a;用于显示数据的二维表格&#xff0c;支持列排序、选择、编辑等功能。TreeTableView&#xff1a;类似于 TableView&#xff0c;但支持分层数据展示&#xff0c;适合树形结构的数据。 2. TableView 的常用方法 2.1 构造方法 TableView()…

cocoscreater3.8.4生成图集并使用

1.安装texturepacker&#xff0c;去官网下载https://www.codeandweb.com/texturepacker 2.将图片拖动进来&#xff0c;即可自动生成精灵表&#xff0c;这里输出选用cocos2d-x&#xff0c;打包用免费版的“基本”就行&#xff0c;高级模式是收费的&#xff0c;然后点击“发布精…

解决SSL VPN客户端一直提示无法连接服务器的问题

近期服务器更新VPN后&#xff0c;我的win10电脑一致无法连接到VPN服务器&#xff0c; SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后&#xff0c;终于通过以下设置方式解决了问题&#xff1a; 1、首先&#xff0c;在控制面板中打开“网络和共享中心”窗口&…

Docker login 报证书存储错误的解决办法

文章目录 docker login 出现错误&#xff0c;提示&#xff1a;Error saving credentials: error storing credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY 环境 使用的是 Mint Linux &#xff0c;容器为 docker-ce 最新版 1 2 3 4 $…

从零开始学GeoServer源码(二)添加支持arcgis切片功能

文章目录 参考文章环境背景1、配置打包好的程序1.1、下载GeoServer的war包1.2、下载GeoWebCache1.3、拷贝jar包1.4、修改配置文件1.4.1、拷贝geowebcache-arcgiscache-context.xml1.4.2、修改geowebcache-core-context.xml1.4.3、修改geowebcache-servlet.xml 1.5、配置切片信息…