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 …...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
