Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户
1. 场景
有一项工作,需要将数据从一个服务S中读取出来(得到的是一个JSON),将数据解析转换以后构造成一个数组的类型A的对象,写入到一个服务T中。
- A.class
@Data
public class A
{String f0 ;String f1 ;
}
在发现需要增加一种类型A的字类型B,这个类型属性非常多(将近一百),在这种情形下,如果直接定义出类型B来,定义那么多属性,还得设置,将会有更大的工作量,所以考虑是不是这些额外的信息可以用一个Map来存储。变成如下结构:
- A.class
@Data
public class A
{String f0 ;String f1 ;Map<String , Object> otherPropMap ;
}
输出的JSON:
{"f0":"" ,"f1":"" ,"op1":"" ,"op2":"" ,
}
2. 做法
@Data
public class A
{String f0 ;String f1 ;Map<String , Object> otherPropMap ;@JsonAnyGetterpublic Map<String , String> getOtherPropMap(){return otherPropMap ;}
}
在jackson-annotations-2.11时,@JsonAnyGetter注解只能用在Method上,在2.13版本中,已经可以直接使用在属性上了。
3. JsonUnwrapped用法
@JsonUnwrapped注解,只对Bean其作用,Map是不能起作用的。例如下面是可以的。
@Data
public class A
{String f0 ;@JsonUnwrappedB f1 ;
}// B.java
public class B
{String f3 ;String f4 ;
}
那么输出结果是:
{"f0":"" ,"f3":"" ,"f4":""
}
相关文章:
Jackson序列化Bean额外属性附加--@JsonAnyGetter、@JsonUnwrapped用户
1. 场景 有一项工作,需要将数据从一个服务S中读取出来(得到的是一个JSON),将数据解析转换以后构造成一个数组的类型A的对象,写入到一个服务T中。 A.class Data public class A {String f0 ;String f1 ; }在发现需要…...
排序算法——冒泡排序算法详解
冒泡排序算法详解 1.引言2.算法概览2.1输入处理2.2核心算法步骤2.3数据结构2.4复杂度分析 3.算法优化4.边界条件和异常处理5.实验和测试6.应用和扩展7.代码示例8.总结 1.引言 冒泡排序是一种简单而直观的比较排序算法,它通过多次遍历数组,比较相邻元素并…...
宋仕强论道之华强北的缺货潮(十六)
始于2019年缺货潮让华强北又生产一大批亿万富翁,缺货的原因主要是:首先,疫情封控导致大量白领在家远程办公,需要购买电脑、打印机等办公设备,同时孩子们也要在家上网课,进一步增加对电子智能终端产品的需求…...
登录注册页面
前提:基于element-ui环境 模态登录组件 分析Login.vue <template><div class"login"><span click"handleClose">X</span></div> </template><script> export default {name: "Login",m…...
视频美颜SDK详解:动态贴纸技术的前沿探索
当下,美颜SDK的动态贴纸技术作为视频美颜的独特亮点,吸引了越来越多开发者和用户的关注。 一、技术详解 动态贴纸技术是视频美颜SDK中的一项创新性功能,它通过在实时视频中添加各种动态效果,为用户提供更加生动有趣的拍摄体验。…...
vue3 实现上传图片裁剪
在线的例子以及代码,请点击访问链接...
flink1.18 广播流 The Broadcast State Pattern 官方案例scala版本
对应官网 https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/fault-tolerance/broadcast_state/ 测试数据 * 广播流 官方案例 scala版本* 广播状态* https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/fault-tolerance…...
vueRouter中scrollBehavior实现滚动固定位置
使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。 注意: 这个功能只在 HTML5 h…...
解决WinForms跨线程操作控件的问题
解决WinForms跨线程操作控件的问题 介绍 在构建Windows窗体应用程序时,我们通常会遇到需要从非UI线程更新UI元素的场景。由于WinForms控件并不是线程安全的,直接这样做会抛出一个异常:“控件’control name’是从其他线程创建的,…...
从零开始:Git 上传与使用指南
Git 是一种非常强大的版本控制系统,它可以帮助您在多人协作开发项目中更好地管理代码版本,并确保每个团队成员都能及时地获取最新的代码更改。在使用 Git 进行版本控制之前,您需要先进行一些设置,以确保您的代码能够顺利地与远程仓…...
Docker compose部署Golang服务
Docker Compose 部署 在使用docker部署时,除了使用--link的方式来关联容器之外,还可以使用 docker compose 运行多个容器。 本文以项目:https://github.com/johncxf/go-api 为例。 定义 Dockerfile 我这里用于区分默认 Dockerfile 文件&a…...
Day36 435无重叠区间 763划分字母区间
435 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 本题与上一题类似: 如果按照左…...
【Servlet】如何编写第一个Servlet程序
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得,欢迎大家在评论区交流讨论💌 Servlet是Java编写的服务器端…...
读懂比特币—bitcoin代码分析(五)
今天的代码分析主要是 bitcoin/src/init.cpp 文件中的三个函数:AppInitSanityChecks、AppInitLockDataDirectory、AppInitInterfaces,下面我们来说明这三个函数是用来干什么的,并逐行解读函数代码,先贴出源代码如下: …...
uniapp使用uQRCode插件生成二维码的简单使用
最近在找移动端绘制二维码的问题 ,直接上代码 下载 weapp-qrcode.js(可以通过npm install weapp-qrcode --save 下载,之后把它父子到untils目录下) npm install weapp-qrcode --save在组件页面使用 <canvas id"couponQrcode" canvas-id&qu…...
【寒假每日一题·2024】AcWing 4965. 三国游戏(补)
文章目录 一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 一、题目 1、原题链接 4965. 三国游戏 2、题目描述 二、解题报告 1、思路分析 思路参考y总:y总讲解视频 (1)题目中的获胜情况分为三种ÿ…...
docker 安装mongodb 数据库
1.拉取mongodb镜像 docker pull mongo2.创建文件夹 mkdir -p /home/mongo/conf/ mkdir -p /home/mongo/data/ mkdir -p /home/mongo/logs/3.新增mongod.conf文件 cd /home/mongo/conf && vi mongod.confmongod.conf文件内容: # 数据库文件存储位置 dbpa…...
整数反转算法(leetcode第7题)
题目描述: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1…...
微信小程序(十)表单组件(入门)
注释很详细,直接上代码 上一篇 新增内容: 1.type 属性指定表单类型 2.placeholder 属性指定输入框为空时的占位文字 源码: form.wxml <!-- 提前准备好的布局结构代码 --> <view class"register"><view class"…...
xcode 设置 ios苹果图标,为Flutter应用程序配置iOS图标
图标设置 1,根据图片构建各类尺寸的图标2.xcode打开ios文件3.xcode设置图标4.打包提交审核,即可(打包教程可通过我的主页查找) 1,根据图片构建各类尺寸的图标 工具网址:https://icon.wuruihong.com/ 下载之后文件目录如下 拷贝到项目的ios\Runner\Assets.xcassets\AppIcon.ap…...
如何快速完成黑苹果安装?OpCore Simplify终极简化指南
如何快速完成黑苹果安装?OpCore Simplify终极简化指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 厌倦了繁琐的黑苹果配置过程&#x…...
ZFAKA发卡网搭建避坑实录:从YAF扩展安装到目录权限,我踩过的雷你别再踩了(Linux环境)
ZFAKA发卡网Linux搭建实战:关键问题解析与深度排雷指南 第一次在Linux上部署ZFAKA时,我本以为按照教程半小时就能搞定,结果却花了整整两天时间与各种报错信息搏斗。从YAF扩展的诡异报错到目录权限引发的连锁反应,每个环节都暗藏杀…...
保姆级教程:在绿联NAS上用Docker Compose一键部署PaddleOCR,打造本地私有化OCR服务
绿联NASDocker Compose极简部署PaddleOCR:零命令行打造私有文字识别服务 家里堆积如山的合同发票需要电子化?团队内部敏感文档不敢用云端OCR?绿联NAS用户现在可以抛开复杂命令,用Docker Compose三分钟搭建企业级文字识别服务。本文…...
51单片机项目避坑实录:我的声光控灯为什么白天也亮?从硬件到代码的故障排查指南
51单片机声光控灯项目实战:从硬件选型到代码调试的深度避坑指南 深夜的实验室里,我盯着眼前这个不听话的声光控灯——明明窗外阳光明媚,它却固执地亮着。作为一名嵌入式开发新手,这个看似简单的51单片机项目让我踩遍了所有可能的坑…...
终极指南:ImagePicker资源解析机制如何高效处理图像资源
终极指南:ImagePicker资源解析机制如何高效处理图像资源 【免费下载链接】ImagePicker :camera: Reinventing the way ImagePicker works. 项目地址: https://gitcode.com/gh_mirrors/im/ImagePicker ImagePicker作为一款重新定义图片选择体验的工具…...
自动送料装车系统PLC控制的设计——24页
自动送料装车系统作为工业自动化领域的关键环节,其核心作用在于通过PLC(可编程逻辑控制器)实现物料输送、定位、装载等流程的精准控制。传统人工操作易受疲劳、环境等因素影响,导致效率波动与安全隐患。而PLC控制通过预设逻辑程序…...
OpenClaw 的模型服务是否支持基于策略的流量控制?
关于OpenClaw模型服务是否支持基于策略的流量控制,这个问题其实触及了现代AI服务部署中一个相当核心的环节。直接说结论的话,答案是肯定的,但更值得探讨的是它具体如何实现,以及这种支持在实际场景中意味着什么。 在技术架构层面&…...
别再让用户长按了!用html2canvas在微信H5里优雅生成分享海报(Vue3/TS实战)
微信H5海报生成实战:用html2canvas打造零摩擦分享体验 每次看到用户笨拙地长按屏幕、小心翼翼地调整手指位置就为了保存一张活动海报,作为开发者的你是否感到一丝愧疚?在移动端体验至上的今天,这种原始操作显然与"优雅"…...
Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)
Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南) 在物联网开发领域,MQTT协议因其轻量级和高效性成为设备通信的首选方案。对于使用QT5.15.2进行跨平台开发的工程师而言,在Windows环境下正确配置MQTT模块往往是项目起步的…...
OpenClaw+nanobot备份方案:自动化配置与数据同步
OpenClawnanobot备份方案:自动化配置与数据同步 1. 为什么需要备份nanobot环境 上周我的开发机突然硬盘故障,导致辛苦配置了两个月的nanobot环境全部丢失。那一刻我才深刻意识到,对于这种高度定制化的AI自动化系统,没有备份方案…...
