使用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等。

相关推荐
Daniel 大东1 小时前
BugJson因为json格式问题OOM怎么办
java·安全
Theodore_10225 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸6 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象6 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了7 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·7 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王7 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神8 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式