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

相关推荐
程序员阿鹏19 分钟前
详解:模板设计模式
java·开发语言·jvm·后端·设计模式·eclipse·1024程序员节
何苏三月22 分钟前
设计模式 - 简单工厂模式
java·设计模式·简单工厂模式
weixin_3784102440 分钟前
java springboot项目如何计算经纬度在围栏内以及坐标点距离
java·开发语言·spring boot
夜雨翦春韭1 小时前
【代码随想录Day54】图论Part06
java·开发语言·数据结构·算法·leetcode·图论
坠金1 小时前
激活函数/激活层
java·开发语言·servlet
customer081 小时前
【开源免费】基于SpringBoot+Vue.J影城管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源
LKID体1 小时前
docker 数据目录迁移
java·docker·eureka
叫我阿笑就好了1 小时前
Json库和文件操作
后端·json·restful
CoderIsArt1 小时前
工厂方法模式与抽象工厂模式
java·工厂方法模式·抽象工厂模式
何苏三月2 小时前
设计模式 - 工厂方法模式
java·开发语言·设计模式