关于OKHTTP拦截器Interceptor很强大,很好用。因为公司有个需求需要对所有请求接口添加共有参数并且对共有参数进行签名。在OKHTTP中GET的请求参数和POST表单形式的参数很容易获取,但是对于BODY类型的一时没想到解决办法,后来想了想发现其实都是可以做的。
GET方法直接url.request().query()即可获得key=value&key=value形式的参数,可以直接拼凑参数,然后签名。
POST方法:有三种情况,表单,body,multipart三种情况,对于multipart主要是文件,一般过滤掉。
重要源码:
if (requestBody instanceof FormBody) { for (int i =0; i < ((FormBody) requestBody).size(); i++) {rootMap.put(((FormBody) requestBody).encodedName(i), ((FormBody) requestBody).encodedValue(i));} } else { //buffer流 Buffer buffer = new Buffer();requestBody.writeTo(buffer);String oldParamsJson = buffer.readUtf8();rootMap = mGson.fromJson(oldParamsJson, HashMap.class); //原始参数rootMap.put("publicParams", commomParamsMap); //重新组装String newJsonParams = mGson.toJson(rootMap); //装换成json字符串request = request.newBuilder().post(RequestBody.create(JSON, newJsonParams)).build();}
具体靠参考:http://blog.csdn.net/wuyinlei/article/details/57087872
网友评论