场景
我们使用retrofit的注解提交表单到服务器,
但是后台要求提交的格式为json格式
如下:
@POST("account/login")
@FormUrlEncoded
fun login(
@Field("phone") phone: String,
@Field("password") password: String,
@Field("platform") platform: String
): Observable<Any>
提交的格式为
phone=***&&password=***&&platform=**
但是要求的格式为
{
"password": "13100000001",
"phone": "13100000001",
"platform": "ANDROID"
}
使用拦截器改变提交的数据格式为json格式
public class ParametersIntercept implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody body = request.body();
if (body instanceof FormBody) {
FormBody formBody = (FormBody) body;
Map<String, String> formMap = new HashMap<>();
// 从 formBody 中拿到请求参数,放入 formMap 中
for (int i = 0; i < formBody.size(); i++) {
formMap.put(formBody.name(i), formBody.value(i));
}
// 将 formMap 转化为 json 然后 AES 加密
Gson gson = new Gson();
String jsonParams = gson.toJson(formMap);
// 重新修改 body 的内容
body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
}
request = request.newBuilder()
.post(body)
.build();
return chain.proceed(request);
}
}
网友评论