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