Spring Boot进阶(46):集成Jackson之快速入门 | 超级详细,建议收藏

news2024/12/23 23:06:24

1. 前言🔥

        在上一期《SpringBoot之Jackson配置全局时间日期格式》文中提到Jackson,了解到有很多小伙伴对它很感兴趣;顾这一期,我就重点带着大家以最基础的教学方式领大家入门,废话不多说,咱们这就开始。

        这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!! 

2. 环境说明🔥

本地的开发环境:

  • 开发工具:IDEA 2021.3
  • JDK版本: JDK 1.8
  • Spring Boot版本:2.3.1 RELEASE
  • Maven版本:3.8.2

3.正文🔥

3.1 概述

        在日常开发过程中,用于处理json和xml格式化的类库中,用的比较广泛的就属Jackson了,而且Spring MVC 框架默认的json解析器也是Jackson。

        在当前,除了jackson外,常见的解析器还有:Jsonlib,Gson,fastjson等;对比这些解析器,jackson的优势立马就体现出来了,比如解析大的json文件jackson处理速度快,运行时占用内存低,性能好,而且jackson附带灵活的API,便于扩展和定制;

        而对于Jackson 的 1.x 版本的包名为 org.codehaus.jackson ,当版本升级到 2.x 以上时,包名变为 com.fasterxml.jackson,本文教学的内容也是基于最新的 Jackson 2.9.1 版本。

        总之Jackson是一款非常强悍的处理json和xml格式化的开源类库了,安利给大家。

3.2 引入jackson依赖

<!--jackson依赖-->
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency>

        注意:如果你是springboot项目,并且有引入spring-boot-starter-web这个starter,你就不需要引入上方jackson的依赖包了,因为引入web这个starter自带就带有jackson依赖包,所以大家不要重复导包啦,特此提醒!!以上导入jackson依赖是针对没有导入web-starter的小伙伴而设立的,大家看清楚,别重复了。

3.3 求证spring-boot-starter-web自带jackson依赖

        如下,我给大家举证一遍,为何导入了web-starter就不需要导入jackson依赖了。

        对于导入了web starter,深究进去,可以看到在spring-boot-starter-web这个starter包中有涉及json相关的依赖。

        我们选择spring-boot-starter-json继续深入,进入了里头,可以发现,jackson是有被直接集成到该web-starter中的,大家请看如下截图:

所以,非springboot项目的小伙伴,那就得自行引包啦。

3.4 Jackson核心模块介绍

引入Jackson包,我们可以看到,在依赖中分别有如下三类包,大家请看:

        那对于这三类宝,到底分别有何作用呢?有的小伙伴肯定不得而知,没关系,接下来我就具体给大家逐一介绍一下,这三类包分别是干嘛用的,具体如下:

  • jackson-core:

        核心包,它提供基于"流模式"解析的相关 API,它包括JsonPaser和JsonGenerator。Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。

  • jackson-annotations:

        注解包,提供标准注解功能。

  • jackson-databind:

        数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。

4. jackson使用

4.1 导入Jar包

        老样子,使用前先导依赖,具体依赖配置信息如下,你们直接vc大法即可。

<!--jackson依赖-->
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency>

        注意:如果你是springboot项目,并且有引入spring-boot-starter-web这个starter,你就不需要引入上方jackson的依赖包了。至于原因我上篇已经详细解释过了,新来的小伙伴想知道可以去翻我上篇,这里就不再赘述啦。

4.2 Jackson注解

        我们先来学习一下jackson提供的常用注解,大家可根据实际需求,灵活调用,还是非常简单好使的。常用注解及用法如下:

@JsonProperty

用法:此注解用于属性上;作用是把该属性名称序列化为另外一个名称,如把userName属性序列化为name,

示例:

@JsonProperty("name")

private String userName;

@JsonFormat

用法:此注解用于属性或方法;作用是把属性的格式序列化成指定的格式。

示例1: 

@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") 

private Date createTime;

示例2: 

@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") 

public Date getCreateTime(){}

@JsonPropertyOrder

用法:此注解用于用于类;作用是指定属性在序列化时 json 中的顺序 ,

示例: 

@JsonPropertyOrder({ "id", "name","age",""sex }) 

public class Person{}

@JsonCreator

用法:此注解用于构造方法,和 @JsonProperty 配合使用,适用有参数的构造方法。

示例:

@JsonCreator

public LogInfo(@JsonProperty("id") int id) { this.id = id; }

@JsonAnySetter

用法:此注解用于属性或者方法,作用是设置未反序列化的属性名和值作为键值存储到 map 中 

示例:

public class User {

	@JsonProperty("name")
	private String name;

	@JsonProperty("age")
	private String age;
	
	private Map<String, Object> others;

	@JsonAnyGetter
	public Map<String, Object>anySetter() {
		return others
	}

	@JsonAnySetter
	public void anySetter(String key, Object value) {
		if (others == null) {
			others = new HashMap<>();
		}
		others .put(key, value);
	}
}

@JsonAnyGetter

用法:此注解用于方法 ,作用是获取所有未序列化的属性 。

示例:

@JsonAnyGetter

public Map<String, Object>anySetter() { return others }

@JsonIgnore

用法:此注解用于属性上,作用是进行JSON操作时忽略该属性

示例:

@JsonIgnore

private String exception;

4.3 Json转为Java对象

提及json串转成对象,方式方法太多了。但是今天我要你要学会用jackson来处理,想不想学?很简单的,饭都递嘴边了,张口!

其实核心也就是该方法readValue(),学会使用即可。

案例演示如下:

/**
 * json字符串转对象
 */
@Test
void testReadValue() throws JsonProcessingException {
    //1.定义一个json串
    String json = "\"{\"id\":1,\"name\":\"bug菌\",\"age\":18,\"sex\":\"男\",\"address\":\"上海市闵行区吴泾镇\",\"describes\":null,\"image\":\"./template/cat.jpg\"}";
    //2.创建ObjectMapper类
    ObjectMapper mapper = new ObjectMapper();
    UserEntity user = mapper.readValue(json, UserEntity.class);
    //3.打印
    System.out.println(user);
}

4.4 Java对象转换Json

将java对象转成json字符串,用到了writeValueAsString()方法,学会使用即可。

接下来我给大家演示一下,如何使用?

/**
 * 对象转json字符串
 */
@Test
void testWriteValueAsString() throws Exception {
    //1.创建对象
    UserEntity user = new UserEntity();
    user.setId(1);
    user.setName("bug菌");
    user.setSex("男");
    user.setAge(18);
    user.setImage("./template/cat.jpg");
    user.setAddress("上海市闵行区吴泾镇");

    //2.创建ObjectMapper类
    ObjectMapper mapper = new ObjectMapper();
    String userJson = mapper.writeValueAsString(user);
    //3.打印
    System.out.println(userJson);

    //4.写入txt文件中
    mapper.writeValue(new File("./template/userJson.txt"), userJson);
}

控制台输出结果如下:

成功将json串写入txt记事本中。

还有更多的复杂的玩法儿,这就不一一举例演示了,更多的是靠大家去钻研了。

5. 热文推荐🔥

滴~如下推荐【Spring Boot 进阶篇】的学习大纲,请小伙伴们注意查收。

Spring Boot进阶(01):Spring Boot 集成 Redis,实现缓存自由

Spring Boot进阶(02):使用Validation进行参数校验

Spring Boot进阶(03):如何使用MyBatis-Plus实现字段的自动填充

Spring Boot进阶(04):如何使用MyBatis-Plus快速实现自定义sql分页

Spring Boot进阶(05):Spring Boot 整合RabbitMq,实现消息队列服务

Spring Boot进阶(06):Windows10系统搭建 RabbitMq Server 服务端

Spring Boot进阶(07):集成EasyPoi,实现Excel/Word的导入导出

Spring Boot进阶(08):集成EasyPoi,实现Excel/Word携带图片导出

Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出

Spring Boot进阶(10):集成EasyPoi,实现Excel模板导出成PDF文件

Spring Boot进阶(11):Spring Boot 如何实现纯文本转成.csv格式文件?

Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?

Spring Boot进阶(13):Spring Boot 如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?

Spring Boot进阶(14):Spring Boot 如何手动连接库并获取指定表结构?一文教会你

Spring Boot进阶(15):根据数据库连接信息指定分页查询表结构信息

Spring Boot进阶(16):Spring Boot 如何通过Redis实现手机号验证码功能?

Spring Boot进阶(17):Spring Boot如何在swagger2中配置header请求头等参数信息

Spring Boot进阶(18):SpringBoot如何使用@Scheduled创建定时任务?

Spring Boot进阶(19):Spring Boot 整合ElasticSearch

Spring Boot进阶(20):配置Jetty容器

Spring Boot进阶(21):配置Undertow容器

Spring Boot进阶(22):Tomcat与Undertow容器性能对比分析

Spring Boot进阶(23):实现文件上传

Spring Boot进阶(24):如何快速实现多文件上传?

Spring Boot进阶(25):文件上传的单元测试怎么写?

Spring Boot进阶(26):Mybatis 中 resultType、resultMap详解及实战教学

Spring Boot进阶(27):Spring Boot 整合 kafka(环境搭建+演示)

Spring Boot进阶(28):Jar包Linux后台启动部署及滚动日志查看,日志输出至实体文件保存

Spring Boot进阶(29):如何正确使用@PathVariable,@RequestParam、@RequestBody等注解?不会我教你,结合Postman演示

Spring Boot进阶(30):@RestController和@Controller 注解使用区别,实战演示

...

6. 文末🔥

        如果想系统性的学习Spring Boot,小伙伴们直接订阅bug菌专门为大家创建的Spring Boot专栏《滚雪球学Spring Boot》从入门到精通,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

关注公众号,获取最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等硬核资源

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

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

相关文章

(字符串) 925. 长按键入 ——【Leetcode每日一题】

❓925. 长按键入 难度&#xff1a;简单 你的朋友正在使用键盘输入他的名字 name。偶尔&#xff0c;在键入字符 c 时&#xff0c;按键可能会被长按&#xff0c;而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字&#xff08;…

【大学物理实验】表面张力

文章目录 选择题选择题 液体表面张力只存在与液体的: A. 内部 B. 底部 C. 表面 D. 表面和内部 正确答案: C 本实验中,下面哪一件测量仪器(工具)是不需要的: A. 力敏传感器 B. 数字电压表 C. 游标卡尺 D. 物理天平 正确答案: D 关于吊环从液体中拉脱力(即最大表面张力)…

距离和相似性度量

文章目录 1. 距离度量1.1 欧几里得距离(Euclidean Distance)1.2 明可夫斯基距离(Minkowski Distance)1.3 曼哈顿距离(Manhattan Distance)1.4 切比雪夫距离(Chebyshev Distance)1.5 马哈拉诺比斯距离(Mahalanobis Distance) 2. 相似性度量2.1 向量空间余弦相似度(Cosine Simila…

盘点五种最常用加密算法!

大家好&#xff0c;我是老三&#xff0c;大家都知道我是一个臭做支付的&#xff0c;支付常常要和一些加签、验签&#xff0c;加密、解密打交道&#xff0c;今天&#xff0c;就给大家来盘点一下最常见的5种加密算法。 前言 大家平时的工作中&#xff0c;可能也在很多地方用到了…

封神榜科技成果 - 国产训练大模型

封神榜科技成果 Fengshenbang 1.0: 封神榜开源计划1.0中英双语总论文&#xff0c;旨在成为中文认知智能的基础设施。 BioBART: 由清华大学和IDEA研究院一起提供的生物医疗领域的生成语言模型。(BioNLP 2022) UniMC: 针对zero-shot场景下基于标签数据集的统一模型。(EMNLP 2022)…

STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

『2023北京智源大会』视觉与多模态大模型

『2023北京智源大会』视觉与多模态大模型 文章目录 一. Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold | 潘新钢 | 南洋理工大学1. Image Manipulation(图像编辑)背景2. Drag Your GAN 二. Machine Learning for 3D Content Creatio…

实验篇(7.2) 14. 站对站安全隧道 - 多条隧道负载均衡(上)(FortiGate-IPsec) ❀ 远程访问

【简介】IPsec VPN虽然价廉物美&#xff0c;但是由运营商原因&#xff0c;经常会出访问慢、不稳定甚至断开的情况&#xff0c;好在现在大多数企业都有二条甚至更多条宽带&#xff0c;我们可以创建多条IPsec VPN&#xff0c;来保证正常访问。 实验要求与环境 OldMei集团深圳总部…

友盟分享之新浪微博站(签名apk下载)

适用环境&#xff1a; 1 单独集成新浪微博分享 2 友盟分享新浪微博 集成步骤&#xff1a; 1 注册新浪微博开发者账号 新浪微博开放平台-首页 2 选择要接入的应用类型 根据官网提示输入对应资料&#xff0c;进行申请 4 创建应用的时候&#xff0c;Android需要输入签名&#x…

NFC无源电子墨水屏

NFC电子纸造就无源可视 电子墨水标签 NFCE-paper For NFC Batteryless E-ink Tag 产品参数 产品型号 PN29_S 尺寸(mm) 95*46.4*5.4mm 显示技术 电子墨水屏 显示区域(mm) 29(H) * 66.9(V) 分辨率(像素) 296*128 像素尺寸(mm) 0.227*0.226 显示颜色 黑/白 视…

摩尔定律放缓后,AMD应如何引领自适应的风潮?

编者按&#xff1a;自适应计算如何为核心市场带来动力&#xff1f;近日&#xff0c;在AMD“自适应和嵌入式产品技术日”活动日上&#xff0c;AMD 全球副总裁唐晓蕾表示&#xff0c;创新是驱动发展的引擎&#xff0c;百行百业的数字化与智能化转型离不开创新输送的源源不断的强劲…

【监控】Zabbix:企业级开源监控解决方案

文章目录 一、zabbix的基本概述二、zabbix的构成三、zabbix的监控对象四、zabbix的常用术语五、zabbix的工作流程六、zabbix进程详解七、zabbix的监控框架7.1 三种架构模式的架构图如下&#xff1a;7.2 每个模块的工作职责&#xff1a; 八、zabbix源码安装及部署一、服务端安装…

电子工程师,一起来聊聊PCB板上的Mark点吧

在PCB设计中&#xff0c;电子工程师需要注意很多方面&#xff0c;新手工程师经常会忽略Mark点&#xff0c;但资深工程师们却对Mark点又爱又恨&#xff0c;甚至不得不花时间耗费在Mark点上&#xff0c;为什么Mark点如此重要&#xff1f;该如何设计Mark点&#xff1f; 一、Mark点…

Linux基础IO - 文件系统 | 软硬链接

之前的文章中我们与文件有关的内容谈论的都是被打开的文件&#xff0c;那么如果文件没有被打开呢&#xff1f;这样文件就一定不再内存中&#xff0c;只能在磁盘外设中存储&#xff0c;本文中我们就来讲述磁盘中文件的相关知识。 磁盘的物理存储结构 一个磁盘由多个盘片叠加而…

如何撰写高效且实用的Prompt

很多人说GPT并没有什么让人惊艳的地方&#xff0c;但实际上&#xff0c;他们并没有发挥好它的潜能。在很多情况下&#xff0c;他们往往没有使用恰当的prompt。一个恰到好处的prompt就如同魔法师在施展魔法时所需要吟唱的咒语&#xff0c;只有那些正确无误的咒语&#xff0c;才能…

Zstack实习-基础知识总结归纳-持续更新

什么是虚拟化&#xff1f; 虚拟化技术是一种将物理计算资源&#xff0c;如服务器、存储和网络等&#xff0c;转化成虚拟的逻辑资源的技术。通过虚拟化技术&#xff0c;可以将多个独立的操作系统运行在同一台物理计算机上&#xff0c;实现资源的共享&#xff0c;提高硬件的利用率…

商业智能之“道、法、器”——企业级BI能力构建指南

一个企业级BI项目看似简单&#xff0c;但实际建设难度却远超想象。如何从0到1搭建BI项目&#xff0c;有没有详细的实施步骤&#xff0c;有没有合适的BI工具推荐&#xff0c;这是很多企业在上BI系统前心中的疑问。因此&#xff0c;本文会详细探讨企业BI能力构建&#xff0c;到底…

【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号

业务场景&#xff1a; 当业务在进行月报报表制作时&#xff0c;会有些模块是需要填充当前月的top问题单&#xff0c;那么这些问题单&#xff0c;在第一列就要给标记序列号从1开始的序号&#xff0c;所以这个序号是根据业务选择的问题单后&#xff0c;在根据当前问题单记录进行的…

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题&#xff1a;《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日&#xff0c;由湖北省人民政府指导&#xff0c;湖北省发展改革委、国家信息中心联合主办&#xff0c;中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络&#xff08;BSN&#xf…

Linux或Windows上实现端口映射

关注“云计算就该这么学”微信公众号&#xff0c;搜索“001”&#xff0c;即可获取氪肝整理的154页Linux学习笔记。 通常服务器会有许多块网卡&#xff0c;因此也可能会连接到不同的网络&#xff0c;在隔离的网络中&#xff0c;某些服务可能会需要进行通信&#xff0c;此时服务…