【Java】Jackson反序列化示例

上篇文章【Java】Jackson序列化案例分析:https://blog.csdn.net/AwesomeP/article/details/144726180

需求

将如下Json字符串映射在Java对象中。
{
“name”: “John Doe”,
“phone”: “1234567890”,
“age”: 30,
“birthday”: “2000-01-01 12:00:00”,
“createTime”: “2020-01-01T12:00:00”,
“isDelete”: false
}
定义如下

String userJsonStr = "{\"name\":\"John Doe\",\"phone\":\"1234567890\",\"age\":30,\"birthday\":\"2000-01-01 12:00:00\",\"createTime\":\"2020-01-01T12:00:00\",\"isDelete\":false}";

Java对象

public class UserBean {private String name;private String phone;private Integer age;private Date birthday;private LocalDateTime createTime;private Boolean isDelete;
}

通过Jackson进行反序列化

关键注解

@JsonFormat@JsonDeserialize

1.@JsonFormat 注解用于指定在序列化和反序列化过程中,日期和时间类型的格式化方式。它可以应用于日期、时间、以及其他需要特定格式的字段。

  • pattern: 指定日期和时间的格式化模式,例如 “yyyy-MM-dd HH:mm:ss”。
  • shape: 指定数据的形状,例如 JsonFormat.Shape.STRING。
  • timezone: 指定时区,例如 “GMT+8” 或 “Asia/Shanghai”。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

2.@JsonDeserialize 注解用于指定自定义的反序列化器,以便在反序列化过程中使用特定的逻辑。它可以应用于类、字段或方法上。

@JsonDeserialize(using = 自定义Deserializer.class)

示例

自定义LocalDateTime的反序列化器,继承JsonDeserializer


import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;/*** 自定义LocalDateTime的反序列化器* 用于将符合特定格式的字符串转换为LocalDateTime对象*/
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {// 定义一个静态常量formatter,用于日期时间的解析// 该格式器考虑了时区,使用的是GMT+8时区private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").withZone(ZoneId.of("GMT+8"));/*** 反序列化方法,将JSON字符串转换为LocalDateTime对象** @param p JsonParser对象,用于解析输入的JSON内容* @param ctxt DeserializationContext对象,提供反序列化上下文信息* @return LocalDateTime 返回转换后的LocalDateTime对象* @throws IOException 当解析输入遇到I/O错误时抛出*/@Overridepublic LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {// 获取JSON解析器解析的文本内容String str = p.getText();// 使用定义好的格式器解析字符串为ZonedDateTime对象ZonedDateTime zonedDateTime = ZonedDateTime.parse(str, formatter);// 将ZonedDateTime对象转换为LocalDateTime对象并返回return zonedDateTime.toLocalDateTime();}
}

在实体类中添加注解
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)

@Data
public class UserBean {private String name;private String phone;private Integer age;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date birthday;@JsonDeserialize(using = LocalDateTimeDeserializer.class)private LocalDateTime createTime;private Boolean isDelete;
}

测试类


import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;public class JsonDeserializationDemo {public static void main(String[] args) {// JSON字符串示例String userJsonStr = "{\"name\":\"John Doe\",\"phone\":\"1234567890\",\"age\":30,\"birthday\":\"2000-01-01 12:00:00\",\"createTime\":\"2020-01-01T12:00:00\",\"isDelete\":false}";// 创建ObjectMapper实例,用于JSON处理ObjectMapper objectMapper = new ObjectMapper();try {// 将JSON字符串反序列化为UserBean对象UserBean user = objectMapper.readValue(userJsonStr, UserBean.class);System.out.println(user);} catch (IOException e) {throw new RuntimeException(e);}}
}

输出:

UserBean(name=John Doe, phone=1234567890, age=30, birthday=Sat Jan 01 12:00:00 CST 2000, createTime=2020-01-01T12:00, isDelete=false)

Process finished with exit code 0

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

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

相关文章

关于studywolf_control动态运动原语

链接&#xff1a; ​​​​​Dynamic movement primitive | studywolf GitHub - studywolf/control: A repository for control benchmarking code GitHub - studywolf/pydmps 以下内容讲解这个指令下的逻辑&#xff1a;python3 run.py arm3 dmp write 目录 (一) run.py…

@RequestParam和@PathVariable的解释与区别

在 Spring 框架中&#xff0c;RequestParam和PathVariable都是用于从 HTTP 请求中获取参数的注解&#xff0c;但它们的使用场景和获取参数的方式有所不同。 1. RequestParam 解释&#xff1a;RequestParam主要用于从 HTTP 请求的查询参数&#xff08;也就是 URL 中?后面的键值…

Python vs PHP:哪种语言更适合网页抓取

本文将比较 Python 和 PHP&#xff0c;以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点&#xff0c;并根据读者的经验水平分析哪种语言可能更容易上手。接下来&#xff0c;文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之&#xff0c;…

c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入

1. 日志目录和文件管理 日志目录&#xff1a;日志文件存储在 ./Exceptions 目录下。日志文件命名&#xff1a;日志文件的命名格式为 yyyy_MM_dd.log&#xff0c;表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes&#xff08;3KB&#xff09;&#xff0c;则会创建…

python+reportlab创建PDF文件

目录 字体导入 画布写入 创建画布对象 写入文本内容 写入图片内容 新增页 画线 表格 保存 模板写入 创建模板对象 段落及样式 表格及样式 画框 图片 页眉页脚 添加图形 构建pdf文件 reportlab库支持创建包含文本、图像、图形和表格的复杂PDF文档。 安装&…

打造两轮差速机器人fishbot:从零开始构建移动机器人

大家好&#xff0c;我是梦笔生花&#xff0c;我们一起来动手创建一个两轮差速的移动机器人fishbot。 机器人除了雷达之外&#xff0c;还需要IMU加速度传感器以及可以驱动的轮子&#xff0c;我们曾介绍过机器人学部分&#xff0c;曾对两差速模型进行过介绍&#xff0c;所以我们…

Python函数(十二):函数的创建和调用、参数传递、返回值

前言&#xff1a;在编程的世界里&#xff0c;函数是一种基本的构建块&#xff0c;它允许我们将代码封装成可重复使用的单元。在Python中&#xff0c;函数的使用尤为重要&#xff0c;因为它不仅有助于代码的模块化&#xff0c;还提高了代码的可读性和可维护性。本章节&#xff0…

网络安全攻防演练中的常见计策

大家觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 引言 在网络安全攻防演练里面&#xff0c;用于分析攻击者动机和行为的&#xff0c;国外的有基于攻击链分析的模型&#xff08;如Cyber Kill Chain和ATT&CK&#xff09;和基于威胁行为的模型&#xff08…

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG &#xff0c;难以解决的时候。 尝试了N种方法&#xff0c;都不行的解决方法。…

2024国赛A问题三和四

问题三 最小螺距单目标优化模型的建立 问题二考虑了在螺距固定的条件下计算舞龙队盘入的终止时间&#xff0c;问题三在第二问的基础提出了改变螺距的要求&#xff0c;即求解在螺距最小为多少时&#xff0c;龙头前把手能够沿着相应的螺线盘入到调头空间的边界。故可将其转换为…

nginx Rewrite 相关功能

一、Nginx Rewrite 概述 定义 Nginx 的 Rewrite 模块允许对请求的 URI 进行重写操作。它可以基于一定的规则修改请求的 URL 路径&#xff0c;然后将请求定向到新的 URL 地址&#xff0c;这在很多场景下都非常有用&#xff0c;比如实现 URL 美化、网站重构后的 URL 跳转等。主要…

GA-Kmeans-Transformer时序聚类+状态识别组合模型

创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识别组合模型 目录 创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识别组合模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识…

最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址&#xff1a;2410.05954https://arxiv.org/pdf/2410.05954 项目地址&#xff1a; jy0205/Pyramid-Flow&#xff1a; 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…

阻塞队列BlockingQueue实战及其原理分析

1. 阻塞队列介绍 1.1 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 数据结构演示网站&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.ht…

重装荣耀X14笔记本电脑踩坑记

这几天趁着有国补搞了台荣耀 X14笔记本电脑。到手后第一件事情对我来说当然是要重装成Windows 11 LTSC版。所以按以往的经验做了个USB启动安装盘&#xff0c;但发现上电后按F12能进入启动设备选择&#xff0c;可是USB分类下没有任何设备。重启按F2进入设置界面&#xff0c;关闭…

hadoop搭建

前言 一般企业中不会使用master slave01 slave02来命名 vmware创建虚拟机 打开vmware软件&#xff0c;新建虚拟机 典型 稍后安装系统 选择centos7 虚拟机名称和安放位置自行选择&#xff08;最小化安装消耗空间较少&#xff09; 默认磁盘大小即可 自定义硬件 选择centos7的i…

Trivy Operator命令使用说明

你已成功安装了 Trivy Operator&#xff0c;以下是命令的使用说明&#xff1a; 1. 查看 VulnerabilityReports VulnerabilityReports 是 Trivy Operator 生成的漏洞扫描报告&#xff0c;用于检查容器镜像中的漏洞。 kubectl get vulnerabilityreports --all-namespaces -o wi…

测试 - 1 ( 9000 字详解 )

一&#xff1a; 测试入门 测试是指运用特定的方法、手段或工具&#xff0c;对某一对象进行验证、检查或评估&#xff0c;判断其是否符合预期标准或目标。例如&#xff0c;修理好一盏灯后通过按开关测试其是否正常工作&#xff1b;通过一次数学测验评估学生对代数知识的掌握程度…

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法(无目标函数)含特征变量置信区间分析

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法&#xff08;无目标函数&#xff09;含特征变量置信区间分析 一、介绍 PAWN&#xff08;Probabilistic Analysis With Numerical Uncertainties&#xff09;是一种基于密度的全局敏感性分析&#xff08;Gl…

DX12 快速教程(2) —— 渲染天蓝色窗口

快速导航 新建项目 "002-DrawSkyblueWindow"DirectX 12 入门1. COM 技术&#xff1a;DirectX 的中流砥柱什么是 COM 技术COM 智能指针 2.创建 D3D12 调试层设备&#xff1a;CreateDebugDevice什么是调试层如何创建并使用调试层 3.创建 D3D12 设备&#xff1a;CreateD…