objectMapper、ObjectNode、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.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 的一些基本用法:

  1. 创建 ObjectMapper 实例:

javaCopy code ObjectMapper objectMapper = new ObjectMapper();

  1. 将 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);
  1. 高级用法和配置:

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);
  1. 处理复杂类型:

// 序列化 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 的具体实现包括 ObjectNodeArrayNodeTextNode 等。

以下是一些基本的用法:

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调用接口时进行参数组装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738311

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP