美文网首页
Okhttp使用拦截器将form表单转化为json格式

Okhttp使用拦截器将form表单转化为json格式

作者: 真胖大海 | 来源:发表于2020-02-28 13:41 被阅读0次

    场景

    我们使用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);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Okhttp使用拦截器将form表单转化为json格式

          本文链接:https://www.haomeiwen.com/subject/fiikhhtx.html