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

本文展示了一个完整的调用示例,入参、返参均是多层嵌套的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等。

相关推荐
Halo_tjn14 小时前
Java 基于分支和循环结构的专项实验
java·开发语言·计算机
洛_尘14 小时前
Java EE进阶5:Spring IoC&DI
java·spring·java-ee
IT小哥哥呀14 小时前
Spring Cloud Stream:一次编写,随处运行
java·spring cloud·微服务··后端开发
Kuo-Teng14 小时前
LeetCode 141. Linked List Cycle
java·算法·leetcode·链表·职场和发展
洛_尘14 小时前
数据结构--9:反射、枚举以及lambda表达式(了解即可)
java·开发语言·数据结构
青衫码上行15 小时前
【Java Web学习 | 第12篇】JavaScript(6)DOM
java·开发语言·前端·javascript·学习
TDengine (老段)15 小时前
TDengine 字符串函数 POSITION 用户手册
android·java·大数据·数据库·物联网·时序数据库·tdengine
弘毅 失败的 mian15 小时前
C++、Java 还是测试开发?
java·c++·经验分享·笔记·测试开发·技术方向·就业
杜子不疼.15 小时前
【C++】 set/multiset底层原理与逻辑详解
java·开发语言·c++
q***318915 小时前
Spring Boot--@PathVariable、@RequestParam、@RequestBody
java·spring boot·后端