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 还是对象映射取决于具体的使用场景和需求。文章来源地址https://www.toymoban.com/news/detail-836427.html

到了这里,关于objectMapper、ObjectNode、JsonNode调用接口时进行参数组装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【五子棋实战】第6章 调用接口进行联调

      引入Jquery,使用JQ封装的ajax,demo如下:   以上代码是一个使用 Ajax 进行 POST 请求的示例。请求发送到 http://localhost:5000/api/next_step ,请求参数包括 board 、 depth 、 ratio 和 length 。成功响应后,根据返回结果进行相应的处理。如果返回的 code 为 200 ,且 flag 为 true ,则显示

    2024年02月10日
    浏览(28)
  • Java请求调用参数格式为form-data类型的接口

    接口参数使用postman调用如图所示,只能使用form-data格式调用 使用java代码发送http请求实现此种方式的接口调用 特别说明:form的Content-Type属性为编码方式 常用有两种 :application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 x-www-form-urlencoded :当action为

    2024年02月12日
    浏览(55)
  • ChatGLM3-6B 的调用参数说明,chat 与stream_chat 接口函数的参数说明

    ChatGLM3-6B 是一个语言大模型,最近在评估这个模型,但发现它的文档有限,只能从demo代码中猜测调用的参数的含义,准确度是有限的;于是,通过查看源代码来研究,目前整理笔记如下: ChatGLM3-6B 的调用接口有两个,一个是chat接口,一个是stream_chat接口 接口函数的实现位于

    2024年02月04日
    浏览(34)
  • 如何利用python调用API接口获取数据进行测试

    一、Python 可以使用 requests 库来调用 API 接口获取数据。以下是基本的步骤: 1.安装 requests 库 pip install requests 2.导入 requests 库 import requests 3.构建 API 请求的 URL 根据 API 文档,构建请求的URL。 例如,  https://api.example.com/posts  是获取所有帖子的 URL。 4.发送 API 请求 使用  requ

    2024年02月11日
    浏览(44)
  • hutool工具进行https接口调用(忽略ssl认证)

    1.设置忽略SSl工具类 2.工具类设置

    2024年02月04日
    浏览(42)
  • 【已解决】在 SpringBoot 中使用 CloseableHttpClient 调用接口时,接收参数中的中文变为“?“

    由于项目需要,需要在代码中使用POST请求去调用另一个服务的接口,即不通过前端,A 项目直接在方法中发起HTTP请求调用 B 项目的接口,当请求体中的参数有中文时,参数接收后中文会变为“?”。 具体原因是参数的编码格式不对,默认为类型为 Content-Type: text/plain; charset=I

    2024年02月10日
    浏览(38)
  • Fiddler抓包app(方便后端定位app调用的是那个接口?参数为何?)

    选择Tools-Options 选择Connections选项卡,选中允许远程连接,如图所示 1)手动代理的主机名设为电脑ip; 2)手动代理的端口设为Fiddler端口号,默认是8888,可修改; 1)在fiddler中点击remove(如图)——remove all,清屏、方便后续查看 2)手机app点对应功能,即可看到对应的请求

    2024年02月16日
    浏览(48)
  • 使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

            Feign是一个声明式的 HTTP客户端框架 ,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。         Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下,在微服务

    2024年02月15日
    浏览(38)
  • 使用python第三方库Parameterized进行接口参数化测试

    说明:使用python自带的unittest单元测试框架进行接口参数化测试时,因unittest不具备参数化测试,所以需要借助Parameterized第三库进行测试。 pip install parameterized 或使用国内豆瓣镜像源安装:pip install parameterized -i https://pypi.douban.com/simple 可以进行大量数据的测试,分离测试数据

    2023年04月08日
    浏览(55)
  • 使用PostMan工具进行接口测试时传递Map类型参数的方法

    Step 1: 设置Header Step 2: 设置参数体 以json格式写好数据 Step 3:Controller层方法体参数设置 测试结果:

    2024年02月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包