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

news/2024/11/1 16:01:36/

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

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

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

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

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

代码实现
java"> //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的是如下,看起来是一些没啥用的信息。

java"><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.ppmy.cn/news/1543625.html

相关文章

Pytorch学习--神经网络--最大池化的使用

一、用法 torch.nn.MaxPool2d torch.nn.MaxPool2d(kernel_size, strideNone, padding0, dilation1, return_indicesFalse, ceil_modeFalse)kernel_size&#xff1a;池化窗口的大小&#xff0c;可以是整数或元组。stride&#xff1a;步幅&#xff0c;默认为与 kernel_size 相同…

2024年10月31日Github流行趋势

项目名称&#xff1a;Amphion 项目维护者&#xff1a;lmxue HeCheng0625 yuantuo666 RMSnow HarryHe11项目介绍&#xff1a;Amphion 是一个用于音频、音乐和语音生成的工具包。其目的是支持可重复的研究&#xff0c;并帮助初级研究人员和工程师开始音频、音乐和语音生成的研究与…

【Python3】【力扣题】409. 最长回文串

【力扣题】题目描述&#xff1a; &#xff08;题意理解&#xff09;统计如下&#xff1a; ① 字母个数本身是偶数。 ② 字母个数是奇数&#xff0c;统计奇数中的偶数部分&#xff0c;例如&#xff1a;字母个数为3&#xff0c;统计其中的2。 ③ 中间可以有一个奇数字母。即只要有…

MyEclipse中讲解Git使用——结合GitLab

1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 2、在myeclipse安装Git插件 下载该文件&#xff0c;将egit.zip解压放入 myeclipse安装路径>dropins>下重新启动myeclipse EGit -…

【部署与升级-会议签到的web安装】

部署与升级-会议的远程安装 技术路线界面规划flaskAPI以及socketio.emit shellout浏览器和后端交互到处是偶遇 技术路线 运行的基础是Flask-Soketio, 并借鉴了后台运行系统指令的代码 和scrncpy项目,app安装的脚本 #mermaid-svg-8H9rbzbpgpnAXfA3 {font-family:"trebuche…

算法笔记(new)

算法 线性插值 线性插值 公式如下 线性插值公式&#xff1a;(x - x1) / (x2 - x1) * (y2 - y1) y1如果要计算两个区间之内的某个点所在的比例值可以用如上公式 例&#xff1a;假设有64个数&#xff0c;我随便取一个数&#xff0c;输出给我一个百分数&#xff0c;这个百分数从…

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…

STM32应用详解(11)I2C驱动程序

文章目录 前言一、I2C驱动程序的编写1.I2C发送一个字节的函数2.I2C发送一串字节的函数3.I2C接收一个字节的函数4.I2C接收一串字节的函数 前言 使用STM32F103固件函数库函数&#xff0c;介绍I2C驱动程序的编写&#xff0c;包括&#xff1a;I2C发送一个字节的函数、I2C发送一串字…