在调用第三方接口时遇到一个问题,原来查询物流信息用get请求入参为一个string,这个没问题,后面接口更新为可以批量传值入参还是一个data但是值为json化后的list。

开始的写法
response = HttpUtil.createGet(String.format(url,list)).execute().charset("utf-8").body();
但是一直报错,意思是传值不规范
java.net.URISyntaxException: Illegal character in query at index 66: http://www.baidu.com/get-track?data=["S32333331798"]
自己在浏览器和postman都直接调用这个接口,返回值没问题。这时候就有点不知道该怎么办了, 突然想到说不定postman和浏览器自动给我转成规范的值了,所以用抓包工具抓了个包,看到果然如此。

虽然显示不规范的地方,但是我没认真数一下,发现不是括号的问题(一开始以为是括号的问题),双引号的问题。后面查了查get请求会将""号转义成%20 。终于找到问题了。
问题是找到了,但是为什么不会转呢,我想到是不是用这个hutool 工具类没给我转,自己写了个http请求发过去 发现还是没转,想到可能是因为get请求传list操作有点不规范,(凭空想象的)因为get请求是有长度限制的,一般接口也不会用post传list呀。但是第三方的接口,就这样对接吧。我想着如果不行就直接传单个,单个的是可以的已经在这上面浪费了很多时间了。可是终于不负有心人,解决方案找到了。 注意:完全是是由我胡乱猜测的,没得到证实。
String encode = URLEncoder.encode(JSONArray.toJSONString(trackNumbers), "UTF-8");
这个可以将参数编码转换下,然后拼接到get请求的参数那边。成功解决。
在使用GET请求调用第三方接口时,遇到传JSON化list参数的问题,原接口接受单个字符串,更新后需批量传值。文章分享了解决方案,通过URL编码处理JSON字符串,确保正确传输。

1万+

被折叠的 条评论
为什么被折叠?



