objectMapper、ObjectNode、JsonNode调用接口时进行参数组装
objectMapper、ObjectNode、JsonNode用于调用接口时进行参数组装···
public String sendText( List< String > listUser, String content ) throws JsonProcessingException{if ( listUser.size() <= 0 ){return "用户ID为空!";}if ( content.length() <= 0 ){return "发送内容为空!";}final String url = WeComConstans.WE_COM_HOST + WeComConstans.WE_COM_SEND_TEXT;final ObjectMapper objectMapper = new ObjectMapper();final ObjectNode objectNode = objectMapper.createObjectNode();//参数组装JsonNode toUserJson = objectMapper.valueToTree( listUser );objectNode.set( "toUser", toUserJson );objectNode.put( "content", content );//调用接口final String resultString = WeComUtil.doPost( url, objectNode.toString() );log.info( "############################# Parameter: " + objectNode );log.info( "############################# Call: " + url + "返回结果:\n" + resultString );final JsonNode jsonNode1 = objectMapper.readTree( resultString );if ( jsonNode1.path( "code" ).asInt() == 200 ){System.out.println( "信息发送成功!" );}else{System.out.println( "信息发送失败!" );}return resultString;}
运行结果:
{"toUser":["s1825","s1824"],"content":"测试信息,请忽略!"}
-----------------------------------------------------------------
更加复杂的组装:
final Map< String, JsonNode > resultMap = new HashMap< String, JsonNode >();final ObjectMapper objectMapper = new ObjectMapper();final ObjectNode paramJson = objectMapper.createObjectNode();List< Object > objectList = vendorDao.getSpendDataVendorVOsByCondition( vendorVO );List< HashMap< String, String > > suppliers = new ArrayList<>();for ( int i = 0; i < objectList.size(); i++ ){HashMap< String, String > map = new HashMap<>();map.put( "third_id", tempVendorVO.getVendorId() );suppliers.add( map );// 组装请求参数JsonNode jsonNode = objectMapper.valueToTree( suppliers );paramJson.set( "suppliers", jsonNode );if ( suppliers.size() >= 10 ){String result = HttpClientUtil.doPostJsonToken( SpendConstans.HOST_URL + SpendConstans.INT_ADD_PYMENT_CUSTOM_SUPPLIER_DELETE, paramJson.toString(), getToken() );// 把集合清空suppliers.clear();explainCustomResult( result, resultMap );}}if ( suppliers.size() > 0 ){String result = HttpClientUtil.doPostJsonToken( SpendConstans.HOST_URL + SpendConstans.INT_ADD_PYMENT_CUSTOM_SUPPLIER_DELETE, paramJson.toString(), getToken() );explainCustomResult( result, resultMap );}
ObjectMapper
ObjectMapper 是 Jackson 库中的一个核心类,用于将 Java 对象序列化为 JSON 格式或将 JSON 数据反序列化为 Java 对象。Jackson 是一个流行的 Java JSON 处理库,广泛用于处理 JSON 数据。
以下是 ObjectMapper 的一些基本用法:
-
创建 ObjectMapper 实例:
javaCopy code ObjectMapper objectMapper = new ObjectMapper();
-
将 Java 对象序列化为 JSON:
// Java 对象
MyObject myObject = new MyObject("John", 25);
// 序列化为 JSON 字符串String jsonString = objectMapper.writeValueAsString(myObject);
将 JSON 反序列化为 Java 对象:
// JSON 字符串String jsonString = "{\"name\":\"John\",\"age\":25}";
// 反序列化为 Java 对象MyObject myObject = objectMapper.readValue(jsonString, MyObject.class);
-
高级用法和配置:
ObjectMapper 支持许多配置选项,例如设置日期格式、忽略空值、自定义序列化器和反序列化器等。以下是一些示例:
// 设置日期格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
// 忽略空值 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 自定义序列化器和反序列化器SimpleModule module = new SimpleModule();
module.addSerializer(MyObject.class, new MyObjectSerializer());
module.addDeserializer(MyObject.class, new MyObjectDeserializer());
objectMapper.registerModule(module);
-
处理复杂类型:
// 序列化 List<MyObject> 为 JSON 数组
List<MyObject> myList = Arrays.asList(new MyObject("John", 25), new MyObject("Alice", 30));
String jsonArray = objectMapper.writeValueAsString(myList); // 反序列化 JSON 数组为 List<MyObject> List<MyObject> deserializedList = objectMapper.readValue(jsonArray, new TypeReference<List<MyObject>>(){});
ObjectMapper 提供了强大的功能,适用于各种 JSON 处理场景。
ObjectNode
ObjectNode 是 Jackson 库中的一个类,属于 Jackson 提供的树模型(Tree Model)。树模型允许你以树的形式操作 JSON 数据,而不是直接映射到 Java 对象。ObjectNode 代表 JSON 对象,它是 JsonNode 的一个具体实现。
以下是 ObjectNode 的基本用法:
1. 创建 ObjectNode 实例:
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode =objectMapper.createObjectNode();
2. 添加属性到 ObjectNode:
objectNode.put("name", "John");
objectNode.put("age", 25);
3. 添加子对象到 ObjectNode:
ObjectNode addressNode = objectMapper.createObjectNode(); addressNode.put("city", "New York");
addressNode.put("zipcode", "10001");
objectNode.set("address", addressNode);
4. 获取属性值:
String name = objectNode.get("name").asText(); int age = objectNode.get("age").asInt();
5. 遍历 ObjectNode 的属性:
Iterator<Map.Entry<String, JsonNode>> fields = objectNode.fields(); while(fields.hasNext()) { Map.Entry<String, JsonNode> entry = fields.next(); String fieldName= entry.getKey(); JsonNode fieldValue = entry.getValue(); // 处理属性值 }
6. 将 ObjectNode 转换为 JSON 字符串:
String jsonString = objectNode.toString();
7. 从 JSON 字符串解析为 ObjectNode:
String json = "{\"name\":\"John\",\"age\":25}";
ObjectNode parsedObjectNode =objectMapper.readValue(json, ObjectNode.class);
ObjectNode 提供了一种方便的方式来处理和操作 JSON 数据,特别适用于需要在运行时动态构建或操作 JSON 结构的场景。然而,如果你的 JSON 结构固定,并且可以映射到一个已知的 Java 类型,那么使用对象映射(Object Mapping)可能更为直观和方便。
JsonNode
JsonNode 是 Jackson 库中的一个抽象类,代表了 JSON 中的节点。JsonNode 是 Jackson 树模型的基础,它提供了一种在 Java 中以树的形式表示 JSON 结构的方式。JsonNode 的具体实现包括 ObjectNode、ArrayNode、TextNode 等。
以下是一些基本的用法:
1. 创建 JsonNode 实例:
ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode =objectMapper.readTree("{\"name\":\"John\",\"age\":25}");
2. 获取属性值:
String name = jsonNode.get("name").asText(); int age = jsonNode.get("age").asInt();
3. 处理数组节点:
JsonNode arrayNode = objectMapper.readTree("[1, 2, 3, 4, 5]"); // 遍历数组 for (JsonNode element : arrayNode) { int value = element.asInt(); // 处理数组元素 }
4. 处理对象节点:
JsonNode objectNode = objectMapper.readTree("{\"name\":\"John\",\"age\":25}"); // 遍历对象的属性 Iterator<Map.Entry<String, JsonNode>> fields = objectNode.fields(); while(fields.hasNext()) { Map.Entry<String, JsonNode> entry = fields.next(); String fieldName= entry.getKey(); JsonNode fieldValue = entry.getValue(); // 处理属性值 }
5. 判断节点类型:
if (jsonNode.isObject()) { // 处理对象节点 } else if (jsonNode.isArray()) { // 处理数组节点 } else if (jsonNode.isTextual()) { // 处理文本节点 } else { // 其他类型处理 }
6. 转换为字符串:
String jsonString = jsonNode.toString();
JsonNode 提供了一种灵活的方式来处理和操作 JSON 数据,尤其适用于需要在运行时动态处理或导航 JSON 结构的场景。但要注意,相比于对象映射(Object Mapping),树模型的操作可能相对繁琐,而且需要更多的手动处理。选择使用 JsonNode 还是对象映射取决于具体的使用场景和需求。
相关文章:
objectMapper、ObjectNode、JsonNode调用接口时进行参数组装
objectMapper、ObjectNode、JsonNode用于调用接口时进行参数组装 public String sendText( List< String > listUser, String content ) throws JsonProcessingException{if ( listUser.size() < 0 ){return "用户ID为空!";}if ( content.lengt…...
2024开年,手机厂商革了自己的命
文|刘俊宏 编|王一粟 2024开年,AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着,首席产品官刘作虎在大年三十就迫不及待地宣布,OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会,…...
【安全】大模型安全综述
大模型相关非安全综述 LLM演化和分类法 A survey on evaluation of large language models,” arXiv preprint arXiv:2307.03109, 2023.“A survey of large language models,” arXiv preprint arXiv:2303.18223, 2023.“A survey on llm-gernerated text detection: Necess…...
Stable Diffusion 模型分享:AstrAnime(Astr动画)
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五 下载地址 模型介绍 AstrAnime 是一个动漫模型,画风色彩鲜明,擅长绘制漂亮的小姐姐。 条目内容类型大模型…...
【GPTs分享】每日GPTs分享之Canva
简介 Canva,旨在帮助用户通过Canva的用户友好设计平台释放用户的创造力。无论用户是想设计海报、社交媒体帖子还是商业名片,Canva都在这里协助用户将创意转化为现实。 主要功能 设计生成:根据用户的描述和创意需求,生成定制的设…...
【机器学习】数据清洗——基于Pandas库的方法删除重复点
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
顺序表增删改查(c语言)
main函数: #include <stdio.h>#include "./seq.h"int main(int argc, const char *argv[]){SeqList* list create_seqList();insert_seqList(list,10);insert_seqList(list,100);insert_seqList(list,12);insert_seqList(list,23);show_seqList(l…...
MyBatis Plus中的动态表名实践
随着数据库应用的不断发展,面对复杂多变的业务需求,动态表名的处理变得愈发重要。在 MyBatis Plus(以下简称 MP)这一优秀的基于 MyBatis 的增强工具的支持下,我们可以更便捷地应对动态表名的挑战。本文将深入研究如何在…...
JAVA IDEA 项目打包为 jar 包详解
前言 如下简单 maven 项目,现在 maven 项目比较流行,你还没用过就OUT了。需要打包jar 先设置:点击 File > Project Structure > Artifacts > 点击加号 > 选择JAR > 选择From modules with dependencies 一、将所有依赖和模…...
概率基础——几何分布
概率基础——几何分布 介绍 在统计学中,几何分布是描述了在一系列独立同分布的伯努利试验中,第一次成功所需的试验次数的概率分布。在连续抛掷硬币的试验中,每次抛掷结果为正面向上的概率为 p p p,反面向上的概率为 1 − p 1-p …...
JavaScript的内存管理与垃圾回收
前言 JavaScript提供了高效的内存管理机制,它的垃圾回收功能是自动的。在我们创建新对象、函数、原始类型和变量时,所有这些编程元素都会占用内存。那么JavaScript是如何管理这些元素并在它们不再使用时清理它们的呢? 在本节中,…...
Neo4j导入数据之JAVA JDBC
目录结构 前言设置neo4j外部访问代码整理maven 依赖java 代码 参考链接 前言 公司需要获取neo4j数据库内容进行数据筛查,neo4j数据库咱也是头一次基础,辛辛苦苦安装好整理了安装neo4j的步骤,如今又遇到数据不知道怎么创建,关关难…...
LeetCode 2878.获取DataFrame的大小
DataFrame players: ------------------- | Column Name | Type | ------------------- | player_id | int | | name | object | | age | int | | position | object | | … | … | ------------------- 编写一个解决方案,计算并显示 players 的 行数和列数。 将结…...
索引失效的 12 种情况
目录 一、未使用索引字段进行查询 二、索引列使用了函数或表达式 三、使用了不等于(! 或 <>)操作符 四、LIKE 操作符的模糊查询 五、对索引列进行了数据类型转换 六、使用 OR 连接多个条件 七、表中数据量较少 八、索引列上存在大量重复值…...
Spring及工厂模式概述
文章目录 Spring 身世什么是 Spring什么是设计模式工厂设计模式什么是工厂设计模式简单的工厂设计模式通用的工厂设计 总结 在 Spring 框架出现之前,Java 开发者使用的主要是传统的 Java EE(Java Enterprise Edition)平台。Java EE 是一套用于…...
运维SRE-19 网站Web中间件服务-http-nginx
Ans自动化流程 1.网站集群核心协议:HTTP 1.1概述 web服务:网站服务,网站协议即可. 协议:http协议,https协议 服务:Nginx服务,Tengine服务....1.2 HTTP协议 http超文本传输协议,负责数据在网站…...
C语言—自定义(构造)类型
2.20,17.56 1.只有当我们使用结构体类型定义变量/结构体数组,系统才会为结构体的成员分配内存空间,用于存储对应类型的数据 2.strct 结构体 一起作为结构体类型标识符 嘿嘿暂时先这样,我会回来改的1、定义一个表示公交线路的结构体,要…...
ArcgisForJS如何实现添加含图片样式的点要素?
文章目录 0.引言1.加载底图2.获取点要素的坐标3.添加含图片样式的几何要素4.完整实现 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。本文在ArcGIS For JavaScript中使用Graphic对象来创建包含图片样式的点要素。 …...
C#之WPF学习之路(2)
目录 控件的父类 DispatcherObject类 DependencyObject类 DependencyObject 类的关键成员和方法 Visual类 Visual 类的主要成员和方法 UIElement类 UIElement 类的主要成员和功能 FrameworkElement类 FrameworkElement 类的主要成员和功能 控件的父类 在 WPF (Windo…...
胶原抗体诱导小鼠关节炎模型
胶原诱导性关节炎小鼠(CIA)作为人类类风湿关节炎模型应用广泛,但CIA引起的关节炎起病比较缓慢,造模周期较长,一般为6-8周(1-12)。Chondrex公司已开发出单一种单克隆抗体合剂诱导的小鼠关节炎模型(CAIA),明显缩短了造模…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
