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

相关推荐
方也_arkling11 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮11 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei1111 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_11211 小时前
web-第一次课后作业
java·开发语言·idea
秋911 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本12 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁12 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
basketball61613 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
NiceCloud喜云13 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书
JAVA面经实录91714 小时前
MyBatis面试题库
java·mybatis