【Easylive】TokenUserInfoDto中@JsonIgnoreProperties和 Serializable 接口作用
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版
这段代码定义了一个名为 TokenUserInfoDto 的 DTO(数据传输对象),用于封装用户令牌信息。以下是对 @JsonIgnoreProperties 和 Serializable 接口作用的详细解释:
1. @JsonIgnoreProperties(ignoreUnknown = true)
作用
• 这是 Jackson 库 提供的注解,用于控制 JSON 序列化/反序列化时的行为。
• ignoreUnknown = true 表示:当 JSON 字符串中包含 DTO 类中没有的字段时,忽略这些字段而不报错。
为什么需要它?
• 场景:如果后端接收的 JSON 数据比 DTO 的字段多(例如前端传了 extraField,但 DTO 未定义该字段),默认情况下 Jackson 会抛出 UnrecognizedPropertyException。
• 解决:添加此注解后,多余的字段会被静默忽略,确保反序列化不会因字段不匹配而失败。
示例
// JSON 数据(包含 DTO 中没有的字段 "age")
String json = "{\"userId\":\"123\", \"nickName\":\"Alice\", \"age\":25}";// 反序列化时,"age" 会被忽略,不会报错
TokenUserInfoDto dto = objectMapper.readValue(json, TokenUserInfoDto.class);
2. implements Serializable
作用
• 标记该类为可序列化的,表示该类的对象可以被转换为字节流(例如存储到文件、通过网络传输或存入 Redis 等缓存)。
• 需要定义一个 serialVersionUID 字段作为版本控制标识符。
为什么需要它?
- 网络传输:
• 在 RPC(如 Dubbo)或分布式系统中,对象需要跨 JVM 传输,必须实现Serializable。 - 持久化存储:
• 将对象保存到磁盘或数据库(如 Redis 的value需要实现序列化)。 - 兼容性:
•serialVersionUID用于验证序列化和反序列化的类是否兼容(如果类结构变更但未更新 UID,会抛出InvalidClassException)。
示例
// 序列化对象到字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(dto);
byte[] bytes = bos.toByteArray();// 从字节数组反序列化
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
TokenUserInfoDto deserializedDto = (TokenUserInfoDto) ois.readObject();
3. 其他代码说明
• 字段含义:
• userId:用户唯一标识。
• nickName:用户昵称。
• avatar:用户头像 URL。
• expireAt:令牌过期时间(时间戳)。
• token:用户认证令牌(如 JWT)。
• Getter/Setter:
提供标准的 Java Bean 方法,便于框架(如 Spring、Jackson)通过反射访问字段。
总结
| 特性 | 作用 | 使用场景 |
|---|---|---|
@JsonIgnoreProperties(ignoreUnknown = true) | 忽略 JSON 中的未知字段 | 防止前端多传字段导致反序列化失败 |
implements Serializable | 支持对象序列化 | 网络传输、缓存存储、RPC 调用 |
serialVersionUID | 版本控制 | 确保序列化兼容性 |
实际应用场景:
• 该 DTO 可能用于用户登录后返回的令牌信息(通过 JSON 响应给前端)。
• 也可能被序列化后存入 Redis(作为缓存或分布式会话)。
相关文章:
【Easylive】TokenUserInfoDto中@JsonIgnoreProperties和 Serializable 接口作用
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 这段代码定义了一个名为 TokenUserInfoDto 的 DTO(数据传输对象),用于封装用户令牌信息。以下是对 JsonIgnoreProperties 和 Serializable 接口作用的详…...
k8s EmptyDir(空目录)详解
1. 定义与特性 emptyDir 是 Kubernetes 中一种临时存储卷类型,其生命周期与 Pod 完全绑定。当 Pod 被创建时,emptyDir 会在节点上生成一个空目录;当 Pod 被删除时,该目录及其数据会被永久清除。它主要用于同一 Pod 内多个容器间的…...
毕业设计:实现一个基于Python、Flask和OpenCV的人脸打卡Web系统(六)
毕业设计:实现一个基于Python、Flask和OpenCV的人脸打卡Web系统(六) Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 Flask也被称为 “microframework” ,因为它使用简单的核心,…...
洛谷题单2-P5717 【深基3.习8】三角形分类-python-流程图重构
题目描述 给出三条线段 a , b , c a,b,c a,b,c 的长度,均是不大于 10000 10000 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢? 如果三条线段不能组成一个三角形,输出Not triangle;如果是…...
批量删除 txt/html/json/xml/csv 等文本文件空白行
我们常常会遇到需要删除 txt 文本文件中空白行的情况,如果文本文件较大,行数较多的时候,有些空白行不容易人工识别,这使得删除文本文件空白行变得非常繁琐,我们需要先找到空白的行,然后才能进行删除操作。尤…...
MySQL数据库中,tinyint(1) 和 tinyint 有什么区别
TINYINT(1) 和 TINYINT 的区别 在 MySQL 中,TINYINT(1) 和 TINYINT 本质上是相同的数据类型,但 TINYINT(1) 中的 (1) 实际上不会影响存储大小或取值范围。 1. TINYINT 及其取值范围 TINYINT 是 MySQL 中最小的整数类型,占用 1 个字节 (8 bi…...
android databinding使用教程
Android DataBinding 是一种可以将 UI 组件与数据源绑定的框架,能够减少 findViewById 的使用,并提高代码的可维护性。下面是 DataBinding 的完整使用教程: 1. 启用 DataBinding 在 build.gradle(Module 级别)中启用 …...
【FreeRtos】任务调度器可以被挂起吗?
1. 省流回答 FreeRTOS的任务调度器可以被挂起(Suspend)。 通过调用API函数 vTaskSuspendAll(),可以临时禁止任务调度器的运行,此时系统将不再进行任务切换(包括抢占式调度和时间片轮转),但中断…...
ES5内容之String接口
注意:slice、substr、substring 都接受一个或两个参数,第一个参数指定字符串的开始位置,第二个参数表示子字符串到哪里结束,slice 和 substring 的第二个参数指定的是子字符串的最后一个字符后面的位置,substr 第二个参…...
k8s运维面试总结(持续更新)
一、你使用的promethues监控pod的哪些指标? CPU使用率 内存使用率 网络吞吐量 磁盘I/O 资源限制和配额:Prometheus可以监控Pod的资源请求和限制,确保它们符合预设的配额,防止资源过度使用。具体指标如container_spec_cpu_quota用于…...
中级:MyBatis面试题深度剖析
一、引言 在Java持久层技术中,MyBatis凭借其强大的映射功能和灵活的SQL编写方式,成为许多企业的首选。面试官通过MyBatis相关问题,考察候选人对框架核心组件的理解、配置管理能力以及在实际项目中解决问题的能力。本文将深入剖析MyBatis的配…...
Kubernetes高级应用(NFS存储)
一、介绍 在 **Kubernetes(K8s)** 中,**NFS(Network File System)存储** 是一种常见的 **持久化存储(Persistent Storage)** 解决方案,适用于需要共享存储、数据持久化或跨 Pod 访问…...
Mysql之事务(下)
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 5. 事务的隔离级别与并发控制 5.1事务的隔离级别 5.2查看与设置事务的…...
某地老旧房屋自动化监测项目
1. 项目简介 自从上个世纪90年代以来,我国经济发展迅猛,在此期间大量建筑平地而起,并且多为砖混结构的住房,使用寿命通常约为30-50年,钢筋混凝土结构,钢结构等高层建筑,这些建筑在一般情况下的…...
【QT】QT的多界面跳转以及界面之间传递参数
QT的多界面跳转以及界面之间传递参数 一、在QT工程中添加新的界面二、多界面跳转的两种情况1、A界面跳到B界面,不需要返回2、A界面跳到B界面,需要返回1)使用this指针传递将当前界面地址传递给下一界面2)使用parentWidget函数获取上…...
【学习笔记】计算机网络(五)
第5章 运输层 文章目录 第5章 运输层5.1 运输层协议概述5.1.1 进程之间的通信5.1.2 运输层的两个主要协议5.1.3 运输层的端口 5.2 用户数据报协议 UDP5.2.1 UDP 概述5.2.2 UDP的首部格式 5.3 传输控制协议 TCP 概述5.3.1 TCP 最主要的特点5.3.2 TCP 的连接 5.4 可靠传输的工作原…...
网络通信三大核心表项详解:MAC表、ARP表、路由表
网络通信三大核心表项详解:MAC表、ARP表、路由表 一、前言 在网络通信中,MAC地址表、ARP表和路由表构成了数据转发的"黄金三角"。作为新华三网络工程师,深入理解这三大表项的工作原理及相互关系,是排查网络故障和优化…...
鸿蒙NEXT小游戏开发:记忆翻牌
1. 引言 在本案例中,我们将使用鸿蒙NEXT框架开发一个简单的记忆翻牌游戏。该游戏的核心逻辑是玩家通过翻转卡片来寻找匹配的对。本文将详细介绍游戏的实现过程,包括卡片的展示、匹配逻辑以及用户交互。 2. 开发环境准备 电脑系统:windows 1…...
AI原生应用爆发:从通用大模型到垂直场景的算力重构
2025年第一季度,中国AI产业迎来标志性转折点:DeepSeek-R1大模型月活用户突破3000万,通义千问QwQ-32B在医疗领域诊断准确率达三甲医院主治医师水平,京东AI虚拟模特单日生成商品图超200万张……这些数据的背后,是AI技术从…...
Java常用工具算法-2--加密算法1--对称加密算法(推荐AES算法)
1、定义与核心原理 定义:加密和解密使用相同密钥的算法。工作流程: 秘钥协商:双方需提前通过安全信道共享密钥。加密过程:发送方用密钥对明文加密,生成密文。解密过程:接收方用相同密钥对密文解密…...
RK3588使用笔记:导出做好的文件系统
一、前言 初始镜像一般都比较空,当费劲八嘞的装了一堆环境之后,得知设备还要在做n套,想想每一套都要无穷的调试配置和在线更新一堆安装包,是不是脑壳痛,所以导出文件系统的功能就有需求了,本文介绍如何导出…...
py常用函数
concat dropna 注意:dropna会返回一个新的DataFrame,不会修改原始数据。若想要修改,可以使用inplaceTrue 默认情况是axis0,删除包含NaN的行 import pandas as pd df pd.DataFrame({A:[1,2,None],B:[3,None,0],C:[4,5,6] }) d…...
Gateway实战(二)、负载均衡
spring cloud- Gateway实战二:负载均衡 负载均衡简单了解一)、实操案例-自动负载均衡二)、实操案例-手动负载均衡1、手动负载均衡方式一2、手动负载均衡方式二负载均衡 简单了解 我们引入负载均衡,主要是为了 让网络流量能均匀的分发到多个服务器上,以此来提高系统性能、…...
NullByte: 1靶场渗透
NullByte: 1 来自 <NullByte: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.221 3,对靶机进行端口服…...
2025.4.1英语听力
https://www.bilibili.com/video/BV1Aw411r7zt?spm_id_from333.788.videopod.sections&vd_sourcedc8ca95ef058b5ce2b5233842ac41f4bhttps://www.bilibili.com/video/BV1Aw411r7zt?spm_id_from333.788.videopod.sections&vd_sourcedc8ca95ef058b5ce2b5233842ac41f4b …...
Kafka 实战指南:原理剖析与高并发场景设计模式
一、介绍 Kafka是由 Apache 软件基金会开发的开源流处理平台,作为高吞吐量的分布式发布订阅消息系统,采用 Scala 和 Java 编写。 Kafka是一种消息服务(MQ),在理论上可以达到十万的并发。 代表的MQ软件—— kafka 十万…...
大型语言模型Claude的“思维模式”最近被公开解剖
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
安装windows server 2016没有可选硬盘,设备安装过ubuntu系统
如果在安装 Windows Server 2016 时无法识别已安装过 Ubuntu 的硬盘,可能是由于硬盘分区格式(如 ext4)与 Windows 不兼容,或缺少必要的驱动程序。以下是详细的解决方案: 1. 检查 BIOS/UEFI 设置 确认硬盘模式 • 重启电…...
贡献法(C++)
贡献法的核心思想: 不要一个个子串去算“有多少种字符”,而是反过来想——每个字符能“贡献”给多少个子串 1.子串分值 #include<bits/stdc.h> #define int long long using namespace std; string s; int sum0; signed main() {cin>>s;for…...
Spring Event 观察者模型及事件和消息队列之间的区别笔记
Spring Event观察者模型:基于内置事件实现自定义监听 在Spring框架中,观察者模式通过事件驱动模型实现,允许组件间通过事件发布与监听进行解耦通信。这一机制的核心在于ApplicationEvent、ApplicationListener和ApplicationEventPublisher等接…...
