1, 一直在使用okhttp 最近有参数要传递数组。
2,google , 源码中是使用 map 参数 key --value 进行存储的。进行重复性赋值的时候 最后一个会替换掉 前一个
3,最简答的是用拼接 URL 的方式进行传递 例如 http://www.baidu.com?a=1&a=2&a=3...... 这样 传递的是一个int[] 类型的 数组
但是 大家都知道的 这种方式还是GET 传递参数,对参数的大小是有要求的。超过之后就会出现异常。 及时你.post (URL) 这样也是 get方式传参数。
如何用高雅的POST 方式 传递参数。
1 既然 okhttp 已经把传递 key LISTValues的方式限制住了。那么 就应该去找,客户端到底传送的是什么,其本质是什么,服务端接收的是什么,其本质又是什么。把这个搞清楚,就知道到底OKHHTTP 能不能进行数组的传递。
2,大家都知道 post 跟get最常用的是HTML 上,所以 我就查了下 HTML 是怎么传递数组的。
代码如下
http://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string(网址)
以上代码,可以看出 HTML 传递数组 就是把参数写成数组的形式,进行传递。
而服务端,当你传递的不是数组的时候 会告诉你 XX类强转成 XX[] 数组错误,那就可以猜测,服务端靠 一定的格式 去强转的。
所以如何仿照 post的 http表单去写这样的请求,脑补资料 https://imququ.com/post/four-ways-to-post-data-in-http.html
这里是 截取的 postman使用数组参数 进行的请求头的参数。
所以 我们只需要在代码中找到 对应的API 就可以了。按照这个区拼接 HTTP的请求。
我这里 是使用的 okHTTP
private void addParams(MultipartBody.Builder builder) {if (params !=null && !params.isEmpty()) {for (Stringkey:params.keySet()) { builder.addPart(Headers.of("Content-Disposition","form-data; name=\"" +key.replaceAll("\\[\\d+\\]","") +"\""), RequestBody.create(null,params.get(key))); } }}
然后就OK了
html这样写 有可能就是为了拼接这个才这样写的。 在postman中尝试,完美解决。传递过去 因为有 数组的标示 会把这个强转成数组。
使用第三方库的时候,最忌讳的就是 使用人家提高的方法,看都不看,对别人说 不支持,其实就像冰河世纪5 中黄数量说的那样,肯定是有办法解决的,只是我们现在没有找到。
就到这里吧,赶紧postman中试试吧
老规矩 QQ:973683374
好多人问啊,搞个开源吧
https://github.com/liqingju123/okhttpUtilsSendArrayString
网友评论