Jackson
first you need to add dependence:
gradle:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1'
原生Jackson的使用示例:
/*** 原生Jackson的使用示例*/
public class JacksonUsageDemo {public static void main(String[] args) throws JsonProcessingException {Address address1 = new Address("北京", "王府井12号", true);Address address2 = new Address("成都", "天府大道55号", false);Person person = new Person("张三", 18, Gender.MALE, Arrays.asList(address1, address2));ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(person);System.out.println(json);Person result = objectMapper.readValue(json, Person.class);System.out.println(result);}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Person {private String name;private Integer age;private Gender gender;private List<Address> addressList;}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Address {private String city;private String detail;private Boolean isPrimary;}private enum Gender {MALE, FEMALE;}
}
if JSON and JavaBean are not same
场景一:JSON比JavaBean多字段,在反序列化时忽略未知字段
使用@JsonIgnoreProperties:可以忽略指定字段,也可以忽略本类所有未知字段
- @JsonIgnoreProperties(value = “year”):ignore the value of json
- @JsonIgnoreProperties(ignoreUnknown = true):ignore every unknown value of JSON
@Data@NoArgsConstructor@AllArgsConstructor@JsonIgnoreProperties(value = "year")
// @JsonIgnoreProperties(ignoreUnknown = true)private static class Car {private String color;private String type;}
场景二:需要的JSON比JavaBean少字段,在序列化时忽略多余字段
- 用@JsonIgnore在字段级别忽略
- 用@JsonIgnoreType在类级别忽略
@RestController
public class FieldsLessController {@GetMapping("/teachers/{id}")public Teacher getStudentById(@PathVariable("id") String id) {return new Teacher(id, "刘老师", Gender.FEMALE);}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Teacher {private String id;private String name;@JsonIgnoreprivate Gender gender;}// @JsonIgnoreTypeprivate enum Gender {MALE, FEMALE;}
}
场景三:字段名不一致,在序列化和反序列化时改变字段名
- 使用@JsonProperty
@RestController
public class FieldsNameMismatchController {@GetMapping("/articles/{id}")public Article getStudentById(@PathVariable("id") String id) {return new Article(id, "论持久战");}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Article {@JsonProperty("articleId")private String id;@JsonProperty("articleTitle")private String title;}
}
json将会返回articleI&&articleTitle
场景四:结构不一致,在序列化时将对象拍平
- 使用@JsonUnwrapped
拍平后:
{
“id”: “1”,
“firstName”: “John”,
“lastName”: “Doe”
}
@RestController
@Slf4j
public class StructureMismatchController {@PostMapping("/employees")public void createEmployee(@RequestBody Employee employee) {log.info("create employee: {}", employee);}@GetMapping("/employees/{id}")public Employee getStudentById(@PathVariable("id") String id) {return new Employee(id, new Name("John", "Doe"));}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Employee {private String id;@JsonUnwrappedprivate Name name;}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Name {private String firstName;private String lastName;}
}
场景五:JSON中的枚举是数字形式,在序列化时使用枚举的序数值
- 使用@JsonValue
@RestController
public class EnumOrdinalController {@GetMapping("/users/v1/{id}")public User getUserById(@PathVariable String id) {return new User(id, "小红", Gender.FEMALE);}@Data@NoArgsConstructor@AllArgsConstructorprivate static class User {private String id;private String name;private Gender gender;}private static enum Gender {MALE, FEMALE;@JsonValuepublic int getOrdinal() {return ordinal();}}
}
场景六:JSON中的时间是特定格式,在序列化时指定时间格式
- 使用@JsonFormat
@RestController
public class TimeFormatController {@GetMapping("/events/{id}")public Event getEvent(@PathVariable("id") String id) {return new Event(id, "pay", new Date());}@Data@NoArgsConstructor@AllArgsConstructorprivate static class Event {private String id;private String name;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date time;}
}
使用自定义序列化器,枚举序列化成数字
@JsonSerialize(using = GenderSerializer.class)
@RestController
public class CustomSerializationController {@GetMapping("/users/v2/{id}")public User getUserById(@PathVariable String id) {return new User(id, "小红", Gender.FEMALE);}@Data@NoArgsConstructor@AllArgsConstructorprivate static class User {private String id;private String name;@JsonSerialize(using = GenderSerializer.class)private Gender gender;}private static enum Gender {MALE, FEMALE;}private static class GenderSerializer extends StdSerializer<Gender> {protected GenderSerializer() {super(Gender.class);}@Overridepublic void serialize(Gender value, JsonGenerator gen, SerializerProvider provider)throws IOException {gen.writeNumber(value.ordinal());}}
}相关文章:
Jackson
first you need to add dependence: gradle: implementation com.fasterxml.jackson.core:jackson-databind:2.13.1 implementation com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1原生Jackson的使用示例: /*** 原生Jackson的使用示例*/ public class Jacks…...
字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪19k,已拿offer
我今年25岁,专业是电子信息工程本科,19年年末的时候去面试,统一投了测试的岗位,软件硬件都有,那时候面试的两家公司都是做培训的,当初没啥钱,他们以面试为谎言再推荐去培训这点让我特别难受。后…...
vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收
前言 最近在做自己项目中,做一个非常简单的新增用户场景,但是使用原生axios发送post请求的时候,还是踩了不少坑的。 唉,说多了都是泪,小小一个新增业务,在自己前后端一起开发的时候,硬是搞了好…...
【python百炼成魔】python之列表详解
文章目录一. 列表的概念1.1 列表是什么?1.2 为什么要使用列表?1.3 列表的定义二. 列表的增删改查操作2.1 列表的读取2.2 列表的切片2.3 列表的查询操作2.3.1 not in ,in 表达式2.3.2 列表元素遍历2.4 列表元素的增加操作2.4.1 append()的相关用法2.4.2 e…...
如何学习 Web3
在本文中,我将总结您可以采取的步骤来学习 Web3。从哪儿开始?当我们想要开始新事物时,我们需要一些指导,以免在一开始就卡住。但我们都是不同的,我们有不同的学习方式。这篇文章基于我学习 Web3 的非常个人的经验。路线…...
大数据框架之Hadoop:MapReduce(一)MapReduce概述
1.1MapReduce定义 MapReduce是一个分布式计算框架,用于编写批处理应用程序,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一…...
一文搞定python语法进阶
前言前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下…...
2019蓝桥杯真题数列求值(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 给定数列 1,1,1,3,5,9,17,⋯,从第 4 项开始,每项都是前 3 项的和。 求第 20190324 项的最后 4 位数字。 运行限制 最大运行时间:…...
spring中@Autowire和@Resource的区别在哪里?
介绍今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?Autowire private JdbcTemplate jdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: &quo…...
算法训练营DAY54|583. 两个字符串的删除操作、72. 编辑距离
583. 两个字符串的删除操作 - 力扣(LeetCode)https://leetcode.cn/problems/delete-operation-for-two-strings/这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可…...
【Ctfshow_Web】信息收集和爆破
0x00 信息收集 web1 直接查看源码 web2 查看不了源码,抓包即可看到(JS拦截了F12) web3 抓包,发送repeater,在响应包中有Flag字段 web4 题目提示后台地址在robots,访问/robots.txt看到Disallow: /fl…...
基于机器学习的推荐算法研究与实现
摘要随着互联网的普及,人们可以通过搜索引擎、社交网络等方式获取大量的信息资源。但是,面对如此之多的信息,人们往往会感到迷失和困惑,无法快速准确地找到自己需要的信息。在这种情况下,推荐算法的出现为我们提供了一…...
(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能
前言 本节内容我们主要介绍一下如何在springboot项目中集成fastdfs组件,实现文件的上传与下载。关于fastdfs服务中间键的安装过程,本节内容不做介绍。fastdfs是一个轻量级的分布式文件系统,也是我们文件存储中常常使用的组件之一,…...
linux好用命令+vs快捷键
linux好用命令 功能指令跳转到vim界面的最后一行shift键g复制当前路径下所有文件和目录(加-r才行)到target目录cp -r * /home/target删除指定文件rm -rf test.txt文件重命名(-i交互式提示)mv -i file1 file2移动某个内容…...
Git 构建分布式版本控制系统
版本控制概念Gitlab部署1.版本控制概念 1.1分类 (一)1 本地版本控制系统(传统模式) (二)2 集中化的版本控制系统 CVS、Subversion(SVN) (三)3 分布式…...
Day891.一主多从的切换正确性 -MySQL实战
一主多从的切换正确性 Hi,我是阿昌,今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候,要先主动跳过这些错误,通过主动跳过一个事务或者直接设置跳过指定的错误,用GTID解决找同步位点的问题 大多…...
【论文笔记】图像修复Learning Joint Spatial-Temporal Transformations for Video Inpainting
论文地址:https://arxiv.org/abs/2007.10247 源码地址:GitHub - researchmm/STTN: [ECCV2020] STTN: Learning Joint Spatial-Temporal Transformations for Video Inpainting 一、项目介绍 当下SITA的方法大多采用注意模型,通过搜索参考帧…...
代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II、总结
打卡第二天,认真做了两道题目,顶不住了好困,明天早上练完车回来再重新看看。 今日任务 第一章数组 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每…...
Python pickle模块:实现Python对象的持久化存储
Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。值得一提的是,pickle 是 python 语言的一个标准模…...
【C++】C/C++内存管理
文章目录1. C/C内存分布2. C语言当中的动态内存管理3. C 内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4. operator new 和operator delete 函数5. new和delete的实现原理5.1 内置类型5.2 自定义类型6. 定位new表达式(placement-new)7. 常见面试题7.1 …...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
