get 请求入参是个List传值问题。

在使用GET请求调用第三方接口时,遇到传JSON化list参数的问题,原接口接受单个字符串,更新后需批量传值。文章分享了解决方案,通过URL编码处理JSON字符串,确保正确传输。

在调用第三方接口时遇到一个问题,原来查询物流信息用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请求的参数那边。成功解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值