Jackson的使用

一引入依赖

<!--Jackson是spring-boot-starter-json的一个依赖(spring-boot-starter-web中包含spring-boot-starter-json)。也就是说,当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 简洁代码和方便打印 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version> 
</dependency>

二测试的实体

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable,Cloneable {private static final long serialVersionUID = 6447932156561222739L;private Integer sNo;private String name;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date birthday;private Integer classNo;private String grade;/*** 方便对象复制* @return* @throws CloneNotSupportedException*/@Overrideprotected Student clone() throws CloneNotSupportedException {return (Student) super.clone();}
}

三转json(序列化)

先声明一个类的全局变量

private static ObjectMapper objectMapper = new ObjectMapper();
  1. 实体(JavaBean)转json
Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = objectMapper.writeValueAsString(s1);
log.info("jackson将Student转的json为{}",s1Json);

测试结果:
jackson将Student转的json为{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1}
2. Map转json

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
Map<String,Student> data = new LinkedHashMap();
data.put("s1",s1);
data.put("s2",s2);
data.put("s3",s3);
data.put("s4",s4);String mapJson = objectMapper.writeValueAsString(data);
log.info("jackson将map转的json为{}",mapJson);

测试结果:
jackson将map转的json为{“s1”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1},“s2”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:2},“s3”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:3},“s4”:{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:4}}
3. List转json

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);List<Student> studentList = new ArrayList<>(Arrays.asList(s1,s2,s3,s4));
String listJson = objectMapper.writeValueAsString(studentList);
log.info("jackson将List转的json为{}",listJson);

测试结果:
jackson将List转的json为[{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:1},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:2},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:3},{“name”:“张三”,“birthday”:“2024-06-16 16:42:07”,“classNo”:1001,“grade”:“一年级”,“sno”:4}]

四转java对象(反序列化)

  1. 转实体(JavaBean)
Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
String s1Json = objectMapper.writeValueAsString(s1);
log.info("jackson将Student转的json为{}",s1Json);Student json1Student1 = objectMapper.readValue(s1Json,Student.class);
log.info("jackson转实体Student结果:{}",json1Student1);JavaType studentType1 = objectMapper.getTypeFactory().constructType(Student.class);
Student json1Student2 = objectMapper.readValue(s1Json,studentType1);
log.info("jackson转实体Student结果:{}",json1Student2);Student json1Student3 = objectMapper.readValue(s1Json, new TypeReference<Student>() {});
log.info("jackson转实体Student结果:{}",json1Student3);

测试结果:
jackson转实体Student结果:Student(sNo=1, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级)
2. 转Map

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
Map<String,Student> data = new LinkedHashMap();
data.put("s1",s1);
data.put("s2",s2);
data.put("s3",s3);
data.put("s4",s4);String mapJson = objectMapper.writeValueAsString(data);
log.info("jackson将map转的json为{}",mapJson);Map<String,Student> json2map = objectMapper.readValue(mapJson,Map.class);
log.info("jackson转Map结果:{}",json2map);

测试结果:
jackson转Map结果:{s1={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=1}, s2={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=2}, s3={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=3}, s4={name=张三, birthday=2024-06-16 16:42:07, classNo=1001, grade=一年级, sno=4}}
3. 转List

Student s1 = new Student(1,"张三",new Date(),1001,"一年级");
Student s2 = s1.clone();
s2.setSNo(2);
Student s3 = s1.clone();
s3.setSNo(3);
Student s4 = s1.clone();
s4.setSNo(4);
List<Student> studentList = new ArrayList<>(Arrays.asList(s1,s2,s3,s4));String listJson = objectMapper.writeValueAsString(studentList);
log.info("jackson将List转的json为{}",listJson);JavaType listType = objectMapper.getTypeFactory().constructCollectionType(List.class,Student.class);
List<Student> json2List = objectMapper.readValue(listJson,listType);
log.info("jackson转List结果:{}",json2List);

测试结果:
jackson转List结果:[Student(sNo=1, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=2, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=3, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级), Student(sNo=4, name=张三, birthday=Sun Jun 16 16:42:07 CST 2024, classNo=1001, grade=一年级)]

五常用注解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六其他用法

在这里插入图片描述
在这里插入图片描述
转自IT利刃出鞘
Jackson用例相关链接

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

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

相关文章

linux中acl策略

文档归属的局限性 - 任何人只属于三种角色&#xff1a;属主 属组 其他人- 无法实现更精细的控制 acl访问策略 - 能够对个别用户个别组设置独立的权限- 大多数挂载ext3/4,xfs文件系统默认已支持 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...setfacl [选项] u:用户名…

4款好用的文本扩展器!!提高工作效率!【送源码】

今天的文章中为大家带来几款好用的文本扩展器&#xff0c;帮助大家提供工作效率&#xff0c;减少重复劳动&#xff5e; Beeftext Beeftext 是一个文本扩展工具&#xff0c;可以帮助用户快速输入短语、段落或者常用的文本片段。它允许你创建自定义的缩写和对应的文本替换&…

使用tkinter创建带有图标的菜单栏

使用tkinter创建带有图标的菜单栏 效果代码代码解析创建主窗口加载图标创建菜单栏添加文件菜单添加带图标的菜单项 Tkinter 的默认菜单外观较为简单&#xff0c;可以通过自定义和添加图标&#xff0c;让菜单显示更好看。 效果 代码 import tkinter as tk from tkinter import …

课时154:项目发布_手工发布_手工发布

1.2.3 手工发布 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 为了合理的演示生产环境的项目代码发布&#xff0c;同时又兼顾实际实验环境的资源&#xff0c;我们这里将 B主机和C主机 用一台VM主机来实现&#xff0c;A主机单…

uniapp vue2 首页生命周期函数等待app.vue加载完毕后执行

代码 //main.js Vue.prototype.$onLaunched new Promise((resolve) > {Vue.prototype.$isResolve resolve })//app.vue // 模拟异步请求setTimeout(() > {this.$isResolve()}, 2000)// index.vue async onLoad() {await this.$onLaunchedconsole.log(onload执行)},注…

UOS常用命令

shutdown 关机 reboot 重启 reboot -f 强制重启 history 查看使用的历史命令 history -c 清空命令行常见目录结构 /bin 存储常用用户指令 /boot 存放用于系统引导时使用的各种文件 /dev 存放设备文件 /etc 存放系统&#xff0c;服务的配置…

Arduino入门2——常用函数及用法

Arduino入门2——串口驱动函数及用法 IO串口 上期&#xff0c;我们简单的认识了一下Arduino&#xff0c;浅浅的入了个门&#xff0c;这一期我们介绍以下Arduino串口常用的函数及用法 IO 常用串口库函数如下&#xff1a; 函数名用法及解析pinMode()用于IO口初始化digitalWrite…

2024050802-重学 Java 设计模式《实战模板模式》

重学 Java 设计模式&#xff1a;实战模版模式「模拟爬虫各类电商商品&#xff0c;生成营销推广海报场景」 一、前言 黎明前的坚守&#xff0c;的住吗&#xff1f; 有人举过这样一个例子&#xff0c;先给你张北大的录取通知书&#xff0c;但要求你每天5点起床&#xff0c;12点…

Proteus 新建工程

Proteus 新建工程 新建简单工程 首先在File工具栏中点击New Project&#xff0c;弹出新建工程向导程序(New Proteus Wizard) 填写工程名称与存储路径&#xff0c;选择New Proteus并点击Next进行下一步设置 我们不需要生成PCB文件&#xff0c;一路默认&#xff0c;点击Next即…

实战计算机网络02——物理层

实战计算机网络02——物理层 1、物理层实现的功能2、数据与信号2.1 数据通信模型2.2 通信领域常用术语2.3 模拟信号和数字信号 3、信道和调制3.1 信道3.2 单工通信、半双工通信、全双工通信3.3 调制3.4 奈式准则3.5 香农定律 4、传输媒体4.1 导向传输媒体4.2 非导向传输媒体 5、…

分布式系统与集群:区别与联系

文章目录 一、分布式和集群1.1 分布式和集群的区别1.2 分布式和集群的联系1.3 总结 二、细节补充2.1 为什么内容分发网络 CDN 被归类为分布式系统而不是集群&#xff1f; 参考资料 一、分布式和集群 分布式&#xff08;distributed&#xff09;是指在多台不同的服务器中部署不…

009.ResNet-FashionMNIST-正确率93.739

一、ResNet简介 ResNet是一次CNN网络架构&#xff0c;核心思想是引入"残差学习"来解决深层网络难以训练的问题。在传统的网络中&#xff0c;每一层都直接尝试学习目标映射。相反&#xff0c;ResNet通过跨层连接&#xff0c;允许某一层学习输入与输出之间的残差&…

高级人工智能复习 题目整理 中科大

题目整理 填空 1.准确性&#xff0c;复杂性&#xff0c;验证集 2. 3 2 n 3^{2^n} 32n 3 C 2 n m 3^{C^m_{2n}} 3C2nm​ 3 m 3^m 3m n 1 n1 n1 3. 状态 从状态s采取行动a后继续采用策略 π \pi π的收益 环境 4. 语法 语义 推理规则 5. 参与者&#xff0c;策略集&#xff…

Elasticsearch 8.1官网文档梳理 - 十一、Ingest pipelines(管道)

Ingest pipelines 管道&#xff08;Ingest pipelines&#xff09;可让让数据在写入前进行常见的转换。例如可以利用管道删除文档&#xff08;doc&#xff09;的字段、或从文本中提取数据、丰富文档&#xff08;doc&#xff09;的字段等其他操作。 管道&#xff08;Ingest pip…

Vite支持的React项目使用SASS指南

前言 在现代前端开发中&#xff0c;SASS是一种广受欢迎的CSS扩展语言&#xff0c;它提供了许多实用功能&#xff0c;如变量、嵌套、部分和混合等。 本教程将指导您在一个使用Vite作为构建工具的React项目中如何配置和使用SASS。 使用步骤 1、创建一个Vite React项目 首先确…

VirtualBox、Centos7下安装docker后pull镜像问题、ftp上传文件问题

Docker安装篇(CentOS7安装)_docker 安装 centos7-CSDN博客 首先&#xff0c;安装docker可以根据这篇文章进行安装&#xff0c;安装完之后&#xff0c;我们就需要去通过docker拉取相关的服务镜像&#xff0c;然后安装相应的服务容器&#xff0c;比如我们通过docker来安装mysql,…

vue 使用 ztree 超大量数据,前端树形结构展示

ztree 是一个很经典的基于jquey开发的树结构编辑展示UI组件库。 创建一个文件 ztree.vue&#xff0c;代码如下&#xff1a; <template><div><div class"ztree vue-giant-tree" :id"ztreeId"></div><div class"treeBox&q…

Android 14 蓝牙主从模式切换

切换蓝牙的A2DP&#xff08;高级音频分布配置文件&#xff09;和AVRCP&#xff08;音频/视频远程控制配置文件&#xff09;的源&#xff08;source&#xff09;和汇点&#xff08;sink&#xff09;模式。 这里&#xff0c;SystemProperties.get尝试获取bluetooth.profile.a2dp.…

在WSL2的Ubuntu中安装和使用Docker/Podman

在WSL2的Ubuntu中安装和使用Docker/Podman 0. 目的 当网络环境良好&#xff08;例如在公司&#xff0c;能直接访问Google等&#xff09;时&#xff0c; Docker/Podman 安装和使用不是问题。 当网络环境不佳&#xff08;例如在家里&#xff09;&#xff0c;要把 WSL2 的 Ubun…

Termius安装docker

安装Termius 直接上官网 新建主机 更新一下yum 更新完成 安装docker的包 直接用命令安装 设置一下开机启动&#xff0c;可以查看docker的版本