用java请求接口使用post请求,json格式
【用java请求接口使用post请求,json格式】项目中用到双层map存储数据,在转换json的过程中,首先是出现双层map转换json出现问题,在这里,我查了好久,然后找到解决方法:
String jsons = JSON.toJSONString(map);
String params = StringEscapeUtils.unescapeJava(jsons);
上面代码中,map是双层map数据,重点是第二句,才转换成功,但是在转换之后,发现转换出来的格式不正确,多了一对双引号:
转换前:{sign=39CC9AED395C0AE4E831F592EBBCB451, params={appKey=E39854D25C234300BCA26774205DE545, timestamp=1575352832709}}
转换后:{"sign":"39CC9AED395C0AE4E831F592EBBCB451","params":“{"appKey":"E39854D25C234300BCA26774205DE545","timestamp":"1575352832709"}”}
多了一对双引号,在网上找了好久,这个问题没有找到解决方案,然后想起来之前在解决上一个问题的时候,有提到
SortedMap
,第二个定义为obj,不给明确定义,这样的话,后续都可以有更多的可能去操作,因为在之后是我将第一层map转换json后,存入的map。这里第二个变量obj就起到作用了,在用obj之前,是没有办法直接在map中存放map 的,我第二个变量用obj之后,第一个map就直接放在了里面,这样的话就是在后续只做了一个json转换,这样就解决了多一层双引号的问题,解决后,考虑可能是因为第一次map转换后,放入map,再进行转换,会将第一个map当作一个value值放入,因此引发的以上问题,下面贴代码,仅解决转换问题。public String getToken() throws ParseException, IOException {
SortedMap map = new TreeMap<>(new Comparator() {
public int compare(String obj1, String obj2) {
// 降序排序
return obj2.compareTo(obj1);
}
});
SortedMap map2 = new TreeMap<>();
map2.put("appKey", appkey);
map2.put("timestamp", time);
String sign = md5Service.createSign(map2, appSecret);
//String json = JSON.toJSONString(map2);
map.put("params", map2);
map.put("sign", sign);
String jsons = JSON.toJSONString(map);
String params = StringEscapeUtils.unescapeJava(jsons);
String token = HttpClientUtil.sendPost(URL, map);
//System.out.println(params);
return token;
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- JS中的各种宽高度定义及其应用
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- 涉毒患者(新诗)
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询