当前位置: 首页 > news >正文

Jackson注解实战:@JsonInclude的妙用

在日常的Java开发中,我们经常需要将Java对象序列化为JSON格式,以便进行数据传输或存储。然而,有时候我们并不希望在JSON中包含某些空值或不必要的字段,这不仅会增加数据的冗余性,还可能对后续的处理造成困扰。Jackson库中的@JsonInclude注解为我们提供了一种优雅的解决方案。今天,我们就来深入探讨一下@JsonInclude(JsonInclude.Include.NON_EMPTY)的使用方法和实际效果。

一、@JsonInclude的背景与作用

@JsonInclude注解是Jackson库提供的一个强大工具,用于控制对象序列化时字段的包含规则。其中,JsonInclude.Include.NON_EMPTY选项可以排除那些被认为是“空”的值。具体来说,以下几种情况会被视为“空”:

  • Null值:字段值为null
  • 空字符串:字段值为""
  • 空集合或数组:例如ListMap、数组等,其长度或isEmpty()方法返回true

通过使用@JsonInclude(JsonInclude.Include.NON_EMPTY),我们可以轻松地过滤掉这些空值,使生成的JSON更加简洁和清晰。

二、实例解析

为了更好地理解@JsonInclude(JsonInclude.Include.NON_EMPTY)的作用,我们来看一个具体的例子。

1. 定义Java对象

首先,我们定义一个Employee类,该类包含了一些常见的字段,如姓名、部门、地址、电话号码列表和薪资等。

package com.logicbig.example;import com.fasterxml.jackson.annotation.JsonInclude;
import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Employee {private String name;private String dept;private String address;private List<String> phones;private AtomicReference<BigDecimal> salary;// Getter和Setter方法省略
}

Employee类上,我们添加了@JsonInclude(JsonInclude.Include.NON_EMPTY)注解,这表示在序列化时,所有空值字段都将被排除。

2. 主程序代码

接下来,我们编写一个主程序来测试Employee类的序列化效果。

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;public class ExampleMain {public static void main(String[] args) throws IOException {Employee employee = new Employee();employee.setName("Trish");employee.setDept("");employee.setAddress(null);employee.setPhones(new ArrayList<>());employee.setSalary(new AtomicReference<>());ObjectMapper om = new ObjectMapper();String jsonString = om.writeValueAsString(employee);System.out.println(jsonString);}
}

在主程序中,我们创建了一个Employee对象,并为其设置了部分字段。其中,dept字段为空字符串,address字段为nullphones字段是一个空的ArrayListsalary字段是一个未初始化的AtomicReference

3. 运行结果

运行上述代码后,输出结果如下:

{"name":"Trish"}

可以看到,只有name字段被序列化到JSON中,其他空值字段(如deptaddressphonessalary)都被成功排除。

三、对比其他注解选项

为了更直观地理解@JsonInclude(JsonInclude.Include.NON_EMPTY)的效果,我们可以对比其他几种注解选项。

1. 不使用@JsonInclude注解

如果我们在Employee类中不使用@JsonInclude注解,那么序列化结果将是:

{"name":"Trish","dept":"","address":null,"phones":[],"salary":null}

可以看到,所有字段都被序列化到JSON中,包括空字符串、null值、空集合和未初始化的AtomicReference

2. 使用@JsonInclude(JsonInclude.Include.NON_NULL)

如果我们将@JsonInclude注解的值改为JsonInclude.Include.NON_NULL,那么序列化结果将是:

{"name":"Trish","dept":"","phones":[],"salary":null}

在这种情况下,只有null值字段被排除,空字符串和空集合仍然会被序列化。

3. 使用@JsonInclude(JsonInclude.Include.NON_ABSENT)

如果我们将@JsonInclude注解的值改为JsonInclude.Include.NON_ABSENT,那么序列化结果将是:

{"name":"Trish","dept":"","phones":[]}

在这种情况下,null值字段和未初始化的AtomicReference字段被排除,但空字符串和空集合仍然会被序列化。

四、总结

通过上述实例和对比,我们可以清楚地看到@JsonInclude(JsonInclude.Include.NON_EMPTY)的强大功能。它能够帮助我们过滤掉所有“空”值字段,从而生成更加简洁、高效的JSON数据。在实际开发中,合理使用@JsonInclude注解可以大大提升数据序列化的质量,减少不必要的数据传输和存储开销。

此外,Jackson库还提供了丰富的注解和功能,值得我们深入学习和探索。希望本文能够帮助你更好地理解和应用@JsonInclude注解,提升你的开发效率和代码质量。

相关文章:

Jackson注解实战:@JsonInclude的妙用

在日常的Java开发中&#xff0c;我们经常需要将Java对象序列化为JSON格式&#xff0c;以便进行数据传输或存储。然而&#xff0c;有时候我们并不希望在JSON中包含某些空值或不必要的字段&#xff0c;这不仅会增加数据的冗余性&#xff0c;还可能对后续的处理造成困扰。Jackson库…...

CAN总线通信协议学习1——物理层

首先来看看CAN是怎么产生的&#xff1a;简单理解&#xff0c;CAN就是一种“拥有特别连接方式”的数据传输的总线&#xff0c;其有特定的一些规则。 &#xff08;注&#xff1a;资料及图片来源于知乎博主TOMOCAT。&#xff09; CAN总线的结构 查阅参考文献&#xff0c;OSI标准…...

Vim 常用快捷键大全:跳转、编辑、查找替换全解析

摘要&#xff1a; Vim 是一款非常强大的文本编辑器&#xff0c;许多程序员和系统管理员都离不开它。 本文详细介绍了 Vim 编辑器中的常用快捷键和命令&#xff0c;从基本模式、光标移动、编辑操作到查找替换&#xff0c;再到文件保存等常用操作&#xff0c;帮助你快速上手并提…...

【Python 数据结构 2.时间复杂度和空间复杂度】

Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…...

【Qt QML】QML鼠标事件(MouseArea)

QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …...

LeetCode 202. 快乐数 java题解

https://leetcode.cn/problems/happy-number/description/ 哈希表 class Solution {public boolean isHappy(int n) {if(n1) return true;HashSet<Integer> setnew HashSet<>();while(n!1&&!(set.contains(n))){//没找到结果&#xff1b;没有重复出现过se…...

《认知·策略·跃迁:新能源汽车工程师的深度学习系统构建指南》

--- ## 前言&#xff1a;为什么传统学习法正在杀死你的竞争力&#xff1f; 在新能源汽车领域&#xff0c;我们正经历着每18个月知识体系更新迭代的指数级变革。当磷酸铁锂电池能量密度刚突破200Wh/kg时&#xff0c;固态电池已进入量产倒计时&#xff1b;当自动驾驶还在L2级徘…...

PHP环境安装达梦数据库驱动实操

PHP环境安装达梦数据库驱动实操 一、环境准备 达梦数据库安装 从达梦官网下载对应系统版本的DM8开发版或企业版&#xff0c;完成安装并确保数据库服务正常运行。安装后需记录数据库的安装路径&#xff08;如Windows默认路径为D:\dmdbms&#xff0c;Linux为/dm/server&#xff0…...

Electron + Vite + React + TypeScript 跨平台开发实践指南

Electron Vite React TypeScript 跨平台开发全栈实践指南 开发环境的搭建(node.js&#xff0c;npm的安装)请参见我的文章 2025Q1 核心组件版本矩阵 组件版本关键改进特性Electron30.0.0原生ESM支持、V8引擎性能优化30%Vite6.0.0多核编译加速、SSR增强模式React21.0.0并发…...

Java---入门基础篇(下)---方法与数组

前言 本篇文章主要讲解有关方法与数组的知识点 ,是基础篇的一部分 , 而在下一篇文章我会讲解类和对象的知识点 入门基础篇上的链接给大家放在下面啦 ! Java---入门基础篇(上)-CSDN博客 感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 欢迎各位大佬指点…...

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进

文章目录 一. 什么是分布式事务&#xff1f;二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…...

【文献阅读】Collective Decision for Open Set Recognition

基本信息 文献名称&#xff1a;Collective Decision for Open Set Recognition 出版期刊&#xff1a;IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING 发表日期&#xff1a;04 March 2020 作者&#xff1a;Chuanxing Geng and Songcan Chen 摘要 在开集识别&#xff0…...

Gorm中的First()、Create()、Update()、Delete()的错误处理

一. First() result : tx.Model(&models.Attachment{}).Where("home ? AND home_id ?", attachment.Home, attachment.HomeID).First(&existingAttachment)如果没有查询到数据&#xff0c;result.Error的值是什么&#xff1f; 在使用 GORM&#xff08;…...

【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法

面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别&#xff0c;其实这四个版本的发展实际上是一环扣一环的&#xff0c;是逐步完善的&#xff0c;本文希望帮助读者梳理清楚各个版本之间的区别&#xff0c;并且给出当前各个版本的应用情况&#xff0c;…...

Navicat连接虚拟机数据库详细教程

Navicat连接虚拟机数据库详细教程 以Windows主机 上的navicat 连接ubuntu虚拟机为例 确认虚拟机ip地址和主机ip地址 主机地址查询 cmd输入ipconfig 登录mysql 创建用户 CREATE USER newuserlocalhost IDENTIFIED BY password; CREATE USER newuser% IDENTIFIED BY passwor…...

委托者模式(掌握设计模式的核心之一)

目录 问题&#xff1a; 举例&#xff1a; 总结&#xff1a;核心就是利用Java中的多态来完成注入。 问题&#xff1a; 今天刷面经&#xff0c;刷到装饰者模式&#xff0c;又进阶的发现委托者模式&#xff0c;发现还是不理解&#xff0c;特此记录。 举例&#xff1a; ​老板​…...

DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力

论文标题&#xff1a;DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 作者团队&#xff1a;DeepSeek-AI 发表时间&#xff1a;2025 前置知识 & 术语 模型蒸馏 语言模型蒸馏的目标是将大型教师模型的知识&#xff08;如语义理解、上…...

实现Unity shader扭曲效果

实现思路 1、扭曲材质赋于面片 2、抓取当前一帧的图片内容 3、获取屏幕坐标 4、利用屏幕坐标对抓取的图片采样 5、再采样张扰动贴图做扭曲 Shader "Unlit/NewUnlitShader" {Properties {_DistortTex ("扰动贴图 (RGB)", 2D) "bump" {}_Di…...

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

七星棋牌源码 是一款运营级的棋牌产品&#xff0c;覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区&#xff0c;支持 安卓、iOS 双端&#xff0c;并且 全开源。这个版本是 修复优化后的二开版本&#xff0c;新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…...

C++STL---<limits>

C <limits> 头文件&#xff1a; <limits> 头文件是 C 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型&#xff08;如 int、float、double 等&#xff09;的详细属性查询功能。通过 std::nume…...

CircuitJS1 Desktop Mod终极指南:开启离线电路仿真新纪元

CircuitJS1 Desktop Mod终极指南&#xff1a;开启离线电路仿真新纪元 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 …...

球形氧化镁—电子材料的导热秘方!

从消费电子到新能源汽车&#xff0c;从5G基站到航空航天器件&#xff0c;每一款高性能电子产品的稳定运行&#xff0c;都离不开核心导热材料。当传统导热材料难以平衡导热效率、绝缘性能与成本控制时&#xff0c;球形氧化镁凭借其独特的结构优势与卓越性能&#xff0c;成为破解…...

Warcraft Helper:现代Windows环境下魔兽争霸3兼容性技术解决方案深度解析

Warcraft Helper&#xff1a;现代Windows环境下魔兽争霸3兼容性技术解决方案深度解析 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper Warcraft Helper…...

Scarab终极教程:2024年最完整的空洞骑士模组管理器使用指南

Scarab终极教程&#xff1a;2024年最完整的空洞骑士模组管理器使用指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装而烦恼吗&#xff1f;Scarab模…...

TPU加速GAN训练:从Colab实操到混合精度调优

1. 项目概述&#xff1a;为什么在Kaggle/Colab上用TPU训GAN不是“炫技”&#xff0c;而是刚需你有没有试过在笔记本电脑上跑一个DCGAN&#xff0c;等了47分钟&#xff0c;loss曲线刚抖两下&#xff0c;风扇就发出濒死的哀鸣&#xff1f;或者在普通GPU上训StyleGAN2&#xff0c;…...

如何快速掌握DLSS Swapper:游戏性能优化终极指南

如何快速掌握DLSS Swapper&#xff1a;游戏性能优化终极指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经因为游戏中的DLSS版本过时而无法享受最新的性能提升&#xff1f;或者新版本DLSS导致游戏闪退让你…...

TBP-9000-R0AE无风扇工控机:6网口4PoE+,严苛工业环境下的边缘计算与机器视觉平台

1. 项目概述&#xff1a;一台为严苛环境而生的工业“大脑”在工业自动化、机器视觉、轨道交通这些领域里&#xff0c;选一台靠谱的工控机&#xff0c;远比在办公室挑台电脑复杂得多。它不仅要算力够用&#xff0c;更得扛得住震动、耐得了高低温、接得了五花八门的工业设备&…...

CCoE专家协作框架:垂直领域AI落地的工程化范式

1. 项目概述&#xff1a;当通用大模型遇上专业深水区&#xff0c;CCoE不是“打补丁”&#xff0c;而是重构知识协作方式你有没有试过让一个刚读完《五年高考三年模拟》的学霸&#xff0c;立刻去给三甲医院心内科会诊&#xff1f;或者让一位通晓全球法律体系的法学教授&#xff…...

紧急更新|Midjourney即将下线--blueprint实验性指令!最后48小时掌握蓝晒法风格不可逆生成逻辑

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney蓝晒法风格的底层视觉基因解码 蓝晒法&#xff08;Cyanotype&#xff09;作为19世纪诞生的古典摄影工艺&#xff0c;其视觉基因并非仅由普鲁士蓝染料决定&#xff0c;而是一套由化学反应、物…...

2026年长沙美缝施工团队哪家强?专业之选等你来揭秘!

在长沙高端住宅、别墅装修领域&#xff0c;美缝施工是提升家居质感的关键环节。面对众多美缝施工团队&#xff0c;业主们常常不知如何选择。今天&#xff0c;我们就来揭秘2026年长沙值得信赖的美缝施工团队——长沙匠心徐师傅美缝团队&#xff0c;看看它有哪些独特的优势。一、…...