当前位置: 首页 > article >正文

使用RestTemplate发送post请求,入参是多层嵌套的JSON

本文展示了一个完整的调用示例,入参、返参均是多层嵌套的JSON。

入参json
{
  "parameter": {
        "a": "a",
        "b": "b",
        "c": {
            "c1": "c1",
            "c2": "c2",
            "c3":"c3"
        }
    }
}

能看出来吧,入参有:parameter、c、c1三层,是多层嵌套的。

返参json
{
    "parameter": {
        "code": "0000",
        "desc": "成功",
        "result": [
            {
                "m": [],
                "n": [
                    {
                        "n1": "123",
                        "n2": "456"
                    },
                    {
                        "n1": "789",
                        "n2": "678"
                    }
                ]
            }
        ]
    }
}

处理思路是:先判断code是否为‘0000’,如果是,则将result以String的格式返回给前端。

代码实现
 //1、拼接入参
 Map queryMap = new HashMap();
 queryMap.put("c1", c1);
 queryMap.put("c2", c2);
 queryMap.put("c3", c3);

 Map paramMap = new HashMap();
 paramMap.put("a", a);
 paramMap.put("b", b);
 paramMap.put("c", queryMap);

 Map paramResult = new HashMap();
 paramResult.put("parameter", paramMap);

 HttpHeaders headers = new HttpHeaders();
 headers.add("Content-Type", "application/json");
 headers.add("apiKey", apiKey);

 HttpEntity < String > entity = new HttpEntity < > (paramResult.toString(), headers);

 //2、请求
 RestTemplate restTemplate = new RestTemplate();
 String response = restTemplate.postForObject("url", entity, String.class);

 //3、处理返参
 JSONObject jsonObject = new JSONObject(response);
 JSONObject parameter = jsonObject.getJSONObject("parameter");
 Object state = parameter.get("code");
 if(state.equals("0000"))
 {
     result = parameter.getString("result");
 }
 return result;
备注

1、postForObject和postForEntity的区别?
postForEntity返回的信息更多,包括状态码、响应头等信息。一般情况下使用postForObject即可。
postForObject的返回值就是上方的“返参JSON”,postForEntity的是如下,看起来是一些没啥用的信息。

<200 OK,{ "parameter" : { "code" : "0000" , "desc" : "成功" , "result" : [ { "m" : [], "n" : [ { "n1" : "123" , "n2" : "456" }, { "n1" : "789" , "n2" : "678" } ] } ] } },{Content-Type=[text/json;charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Date=[Thu, 31 Oct 2024 06:52:39 GMT], X-Kong-Upstream-Latency=[7], X-Kong-Proxy-Latency=[10844], Via=[kong/2.0.1]}>

2、我看到一种说法是:在RestTemplate.post()中如果要使用map,只能使用LinkedMultiValueMap,通过实践发现并不是这样,使用普通map即可。
当然,除了map,还能使用JSONObject等。


http://www.kler.cn/a/381146.html

相关文章:

  • 解释下什么是面向对象?面向对象和面向过程的区别?
  • ubuntu22.04安装PaddleX3
  • Leetcode 3393. Count Paths With the Given XOR Value
  • LAUNCHXL_F28379D_Workspace_CCS124
  • 【085】基于51单片机PID直流电机控制系统【Proteus仿真+Keil程序+报告+原理图】
  • STM32, GD32 cubemx CAN 低速率125kbps 报文丢失,解决了
  • C++优选算法五 位运算
  • SEO
  • UE5相机系统初探(一)
  • 网关(Gateway)和DNS(Domain Name System)
  • 无人机声学侦测算法详解!
  • 构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统
  • 【新闻文本分类识别】Python+CNN卷积神经网络算法+深度学习+人工智能+机器学习+文本处理
  • 软考背诵笔记
  • 【植物识别】Python+深度学习+人工智能+CNN卷积神经网络+算法模型训练+TensorFlow
  • WPF+MVVM案例实战与特效(二十五)- 3D粒子波浪效果实现
  • 吉利极氪汽车嵌入式面试题及参考答案
  • 程序员开发速查表
  • uniapp有关MD5文件上传的方法
  • Vue3里抽离公共模块进行封装然后通过Vue进行调取
  • 字节面试Java基础部分——HashMap
  • QT 如何使QLabel的文字垂直显示
  • 弹性裸金属服务器和传统裸金属服务器有什么区别?
  • 自制inscode项目推荐:色块小游戏
  • 截图工具 for Linux --- 你用过吗?
  • operator[ ]和迭代器,auto,for流,reserve