<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;} } 到…...
COLMAP实战:如何用命令行搞定无人机航拍图像的三维重建?
COLMAP实战:如何用命令行搞定无人机航拍图像的三维重建? 无人机航拍技术正在彻底改变测绘、考古、农业和工程巡检等领域的工作方式。想象一下,你刚刚完成了一次大规模的无人机航拍任务,带回了数百甚至数千张高分辨率图像。这些图像…...
BarrageGrab:构建企业级直播弹幕实时采集系统的技术架构与实践指南
BarrageGrab:构建企业级直播弹幕实时采集系统的技术架构与实践指南 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连,非系统代理方式,无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在直…...
Azure ML算法速查表:面向工程交付的算法选型决策地图
1. 这张“Azure ML算法速查表”到底是什么,又为什么值得你花时间细看?我第一次在客户现场看到这张表,是在一个凌晨三点的模型选型评审会上。客户CTO把一张A3纸拍在桌上:“别再扯XGBoost和LightGBM的区别了,我要知道——…...
美股软件股反弹:AI 重塑软件未来,谁能成为时代赢家?
美股软件股遭遇“集体误杀”去年 10 月底开始,美股软件股经历罕见“集体误杀”。以软件 ETF——IGV 为代表,软件板块从高位显著回撤,跌幅接近 40%。曾经的高质量成长资产软件公司,沦为 AI 浪潮下的“旧世界遗产”。恐慌源于 DeepS…...
HA高可用架构:数字化转型的“隐性及格线”,你达标了吗?
数字化转型的核心是“业务在线、数据可用”,而这一切的前提,是HA(High Availability)高可用架构的支撑。在企业数字化进程中,ERP选型、CRM部署、低代码平台搭建、BI工具落地、API集成打通等动作,都是可见的…...
SAR遥感技术:全天候农业监测的实践指南与数据融合
1. 项目概述:从“看”到“感知”,SAR如何革新农业监测在农业监测领域,我们传统上极度依赖光学卫星图像,比如大家熟知的Landsat、Sentinel-2,它们提供的NDVI(归一化差异植被指数)图几乎成了判断作…...
AI 时代,C# 程序员学 Python 到底值不值?| C#转Python
关键词:C#转Python、Python入门、AI时代、C#程序员、Python学习刷技术社区的时候,你一定见过这种标题:"Python 已成 AI 时代唯一语言""C# 已死,.NET 没未来""不会 Python 的程序员正在被淘汰"说实话…...
【Typescript】12-模块声明文件与第三方库
模块、声明文件与第三方库 当你开始把 TypeScript 真正放进项目里,就会很快遇到一些不再是语法层面的现实问题: 代码和类型应该如何跨文件组织第三方库没有类型时怎么办为什么有些包能直接提示类型,有些却报“找不到声明文件”.d.ts 到底是什…...
大学生几种职业资格证书有哪些?2026年高含金量考证指南与就业规划
你好呀!👋 看到你在这个时间点搜索关于证书的话题,我完全能理解你的心情。转眼间我们已经步入 2026年,当下的就业环境比起几年前,确实发生了不少变化。我也接触过很多像你一样的同学,大家都有点焦虑&#x…...
什么是电子铅封管理系统APP 有那些功能
电子铅封管理系统APP,简单来说,就是用手机App来管理和操作电子铅封的移动端软件。一、传统铅封 vs 电子铅封对比项传统铅封(塑料封/钢丝封)电子铅封防伪性易仿制,肉眼难辨真假全球唯一芯片ID,无法复制追溯能…...
