<Java>Map<String,Object>中解析Object类型数据为数组格式
背景:
前端:入参为字符串和数组类型;通过json字符串传给后台,
后台:后台通过工具解析为Map<String,Object>,然后需要解析出Map里面的数组值做操作;
需求:
入参:
{
“addOrModify”: “add”,
“hrBdName”: “陕西省”,
“hrBdCode”: “1001”,
“hrBuName”: [“宝鸡市”,“咸阳市”,“汉中市”,“渭南市”],
“hrBuCode”: [“100101”,“100102”,“100103”,“100104”]
}
需转化为:List<Map<String,String>>,入库保存;
[{hrBdName=陕西省,hrBdCode=1001,hrBuName=宝鸡市,hrBuCode=100101},
{hrBdName=陕西省,hrBdCode=1001,hrBuName=咸阳市,hrBuCode=100102},
{hrBdName=陕西省,hrBdCode=1001,hrBuName=汉中市,hrBuCode=100103},
{hrBdName=陕西省,hrBdCode=1001,hrBuName=渭南市,hrBuCode=100104}]
Postman入参:

控制层:
转化为Map<String,Object>
public Result addOrModifyConfig(@RequestBody String param) {try {Map<String, Object> paramMap = JsonUtils.readValue(param, Map.class);xxxListService.addOrModifyConfig(paramMap);} catch (Exception e) {log.error("XxxListController addOrModifyConfig is error===:" + e.getMessage(), e);return Result.failure("更新失败");}return Result.success().result(null);}
业务层:
业务逻辑:将入参处理为:List<Map<String,String>>格式:
public Result addOrModifyConfig(Map<String, Object> paramMap) {String addOrModify = String.valueOf(paramMap.get("addOrModify"));if(addOrModify.equals("add")){paramMap.remove("addOrModify");List<Map<String,String>> list = new ArrayList<>();String hrBdName = String.valueOf(paramMap.get("hrBdName"));String hrBdCode = String.valueOf(paramMap.get("hrBdCode"));// hrBuName,hrBuCode 前台传数组,经过工具转为Map<String,Object>,// 因为数据比较简单,所以强转为字符串,去除符号[],切割为数组;String[] hrBuNameArr = String.valueOf(paramMap.get("hrBuName")).replace("[","").replace("]","").split(",");String[] hrBuCodeArr = String.valueOf(paramMap.get("hrBuCode")).replace("[","").replace("]","").split(",");if(hrBuNameArr.length == hrBuCodeArr.length && hrBuNameArr.length > 0){for (int j = 0; j < hrBuNameArr.length; j++) {Map<String,String> map = new HashMap<>();map.put("bdname",hrBdName);map.put("bdno",hrBdCode);map.put("buname",hrBuNameArr[j]);map.put("buno",hrBuCodeArr[j]);list.add(map);}}// 2.查询本数据库数据;List<Map<String,String>> magList = xxxListMapper.selectDepartAll();Iterator<Map<String, String>> iterator = list.iterator();while (iterator.hasNext()){Map<String, String> next = iterator.next();String bdname = String.valueOf(next.get("bdname"));String bdno = String.valueOf(next.get("bdno"));String buname = String.valueOf(next.get("buname"));String buno = String.valueOf(next.get("buno"));next.put("isEnable","1");next.put("dicType","icanDepart");Iterator<Map<String, String>> iterator2 = magList.iterator();while (iterator2.hasNext()){Map<String, String> next2 = iterator2.next();String bdname2 = String.valueOf(next2.get("bdname"));String bdno2 = String.valueOf(next2.get("bdno"));String buname2 = String.valueOf(next2.get("buname"));String buno2 = String.valueOf(next2.get("buno"));if(bdname.equals(bdname2) && bdno.equals(bdno2) && buname.equals(buname2) && buno.equals(buno2)){iterator.remove();}}}if(list.size() > 0){xxxListMapper.addOrModifyConfig(list);}}
持久层:数据入库代码
<select id="selectDepartAll" resultType="map">SELECT *FROM xxx_department_list_dic where 1 = 1</select> <!-- 入库保存 --><insert id="addOrModifyConfig" parameterType="java.util.List"><foreach collection="list" item="res" index="index" separator=";">INSERT IGNORE INTO xxx_department_list_dic<foreach collection="res.entrySet()" index="key" separator="," open="(" close=")">${key}</foreach>VALUES<foreach collection="res.entrySet()" item="value" separator="," open="(" close=")">#{value}</foreach></foreach></insert>
最终目的:

相关文章:
<Java>Map<String,Object>中解析Object类型数据为数组格式
背景: 前端:入参为字符串和数组类型;通过json字符串传给后台, 后台:后台通过工具解析为Map<String,Object>,然后需要解析出Map里面的数组值做操作; 需求: 入参&…...
别再分库分表了,试试TiDB!
什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…...
Java进阶之Dump文件初体验
视频地址:https://www.bilibili.com/video/BV1Ak4y137oh 学习文章:https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc 最近线上频繁的内存告警,同事A通过分析dump文件解决了这个问题,我当然是不会放过这种学习的机…...
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)
利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…...
小程序使用echarts
参考文档:echarts官网、echarts-for-weixin 第一步引入组件库,可直接从echarts-for-weixin下载,也可以从echarts官网自定义生成,这里我们就不贴了组件库引入好后,就是页面引用啦,废话不多说,直…...
面向对象——封装
C面向对象的三大特性为:封装、继承、多态 C认为万事万物都皆为对象,对象上有其属性和行为 例如: 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌… 车也可以作为对象…...
【LeetCode】160.相交链表
题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结…...
【JWT的使用】
文章目录 前言1、用户登录1.1 JWTThreadLocal 2.1 代码实现2.1.1 ThreadLocal工具类2.2.2 定义拦截器2.2.3 注册拦截器 前言 1、用户登录 1.1 JWT JSON Web Token简称JWT,用于对应用程序上用户进行身份验证的标记。使用 JWTS 之后不需要保存用户的 cookie 或其他…...
Python获取音视频时长
Python获取音视频时长 Python获取音视频时长1、安装插件2、获取音视频时长.py3、打包exe4、下载地址 Python获取音视频时长 1、安装插件 pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple2、获取音视频时长.py 上代码:获取音视频时长.py # -*-…...
TCP四次握手为什么客户端等待的时间是2MSL
目录 什么是MSL从第三次握手开始分析总结 什么是MSL MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。 从第三次握手开始分析 第三次握手服务端…...
Android Studio 启用设备远程调试配置完整步聚
启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…...
玩转LaTeX(三)【数学公式(基础)、矩阵、多行公式】
数学公式基础 导言区(引包) \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版,数学模式用于数学公式排版。 …...
jenkins 配置git
在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录(非源码安装直接用yum 安装的) which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…...
单机部署MinIo并设置开机自启
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现&#…...
Latex | 使用MATLAB生成.eps矢量图并导入Latex中的方法
一、问题描述 用Latex时写paper时,要导入MATLAB生成的图进去 二、解决思路 (1)在MATLAB生成图片的窗口中,导出.eps矢量图 (2)把图上传到overleaf的目录 (3)在文中添加相应代码 三…...
宝塔面板定时任务重启各种服务
一个php项目,laravel框架,使用了nginx php redis mysql 还有进程守护supervisor,用于laravel的异步队列进程queue,当服务器重启后有可能部分服务没有成功启动这个时候可以用定时任务去检查服务状态,然后对不正常的自动…...
Ansible playbook编写
目录 palybooks 组成示例:运行palybook定义,引用变量when 条件判断循环Templates模块tags 模块 palybooks 组成 Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行Variables:变量Temp…...
个人博客系统 -- 登录页面添加图片验证码
目录 1. 功能展示 2. 前段代码 3. 后端代码 1. 功能展示 在登录页面添加验证码登录 1. 检测到没有输入验证码或者输入的验证码错误时,进行弹窗提示.并且刷新当前验证码图片 2. 点击验证码进行刷新 2. 前段代码 1. 添加验证码标签,在密码的下面,在login.html进行修改 主要…...
剑指offer10-I.斐波那契数列
学计算机的对这道题肯定不陌生,我记得是学C语言的时候学递归的时候有这道题,于是我就世界用递归写了如下代码: class Solution {public int fib(int n) {if(n1) return 1;if(n0) return 0;return (fib(n-1) fib(n-2)) % 1000000007;} } 到…...
Android多媒体开发避坑:深入理解DMABUF机制与RK3588上的常见泄漏点
Android多媒体开发中的DMABUF机制解析与RK3588内存泄漏实战指南 在RK3588这类高性能芯片上开发视频编解码、相机等多媒体应用时,追求零拷贝性能优化往往会引入DMABUF的使用。然而,这种看似完美的解决方案背后隐藏着复杂的内存管理陷阱。本文将带您深入理…...
【NotebookLM效应量计算实战指南】:20年统计学专家亲授3大避坑法则与5步精准计算流程
更多请点击: https://kaifayun.com 第一章:NotebookLM效应量计算的核心概念与适用场景 NotebookLM 是 Google 推出的基于用户上传文档进行语义理解与推理的实验性 AI 工具。其“效应量计算”并非内置统计模块,而是指用户在利用 NotebookLM 对…...
Arm编译器与64位inode文件系统兼容性问题解析
1. 64位inode文件系统与Arm编译器的兼容性问题解析在嵌入式开发领域,Arm编译器工具链是构建可靠、高效嵌入式系统的核心工具。然而,当开发者使用现代网络文件系统(如NFSv3)或分布式文件系统(如Ceph、CXFS)时…...
SQL Server报错注入原理与三大稳定Payload实战
1. 报错注入不是“碰运气”,而是SqlServer的确定性行为很多人第一次听说“报错注入”时,下意识觉得这是在赌数据库会不会吐错误信息——输个单引号试试,看页面崩不崩;加个AND 1CONVERT(int, (SELECT version)),看是不是…...
AI时代管理者必备的10项核心能力地图
1. 项目概述:这不是一份“领导力清单”,而是一张AI时代管理者的生存地图“10 Essential Skills for AI Leaders”——看到这个标题,很多人第一反应是点开、收藏、转发到“管理者必读”群,然后继续用Excel做季度复盘、用PPT讲战略愿…...
麒麟系统(桌面版)安装 NVIDIA 显卡驱动
麒麟系统(桌面版)安装 NVIDIA 显卡驱动 一、确认系统和显卡信息 # 查看系统版本 cat /etc/kylin-release# 查看内核版本 uname -r# 查看显卡型号 lspci | grep -i nvidia二、更新系统并安装编译依赖 sudo apt update && sudo apt upgrade -y sud…...
别再手动删了!用Notepad++正则表达式5分钟批量清理课程目录(附实战案例)
5分钟极简正则表达式实战:用Notepad智能清洗杂乱课程目录 每次整理网课资源时,最头疼的莫过于面对几十个类似03_Python基础--循环结构实战.mp4这样的文件名。手动一个个删除序号和分类不仅耗时,还容易出错。上周帮同事整理200多份培训视频时&…...
基于RL78/G13的电位器ADC采集与串口通信上位机显示系统设计
1. 项目概述与核心思路最近在整理工作室的旧零件,翻出来一块瑞萨电子的RL78/G13开发板,还有几个吃灰的电位器。想着不能浪费,就琢磨着做个简单但能体现MCU基本功的小项目:用这块开发板实时采集电位器的电压,并把数据上…...
RK3568开发板4G模块上网全流程调试与问题排查指南
1. 项目概述与核心需求解析最近在调试基于TQ3568(也就是大家常说的RK3568)的开发板,其中一个核心功能就是让板子通过4G模块上网。这几乎是所有物联网、边缘计算或者移动设备项目的标配需求。但说实话,从拿到模块到真正跑通网络&am…...
视频硬字幕提取神器:3分钟将任何视频字幕转为可编辑SRT文件
视频硬字幕提取神器:3分钟将任何视频字幕转为可编辑SRT文件 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字…...
