JAVA语言之okhttp传递数组参数
白羽 2018-07-09 来源 :网络 阅读 3019 评论 0

摘要:本文将带你了解JAVA语言之okhttp传递数组参数,希望本文对大家学JAVA有所帮助。



比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常.

解决办法:定义一个对象继承自okhttp3.RequestBody

public class DefaultRequestBody extends okhttp3.RequestBody{

    public List<String> list;

    @Nullable

    @Override

    public MediaType contentType() {

        return MediaType.parse("application/json; charset=utf-8");

    }

 

    @Override

    public void writeTo(BufferedSink sink) throws IOException {

 

    }

}

通过Retrofit定义请求接口API

@FormUrlEncoded@POST("url")

Observable<BaseResult> request(@body DefaultRequestBody body);

打开PostMan,输入url,输入请求参数,选择Body,选择raw,选择JSON(application/json)
1
输入json格式的参数,点击右侧的[code]查看,选择[java ok http],如图
2
关键的代码:

    MediaType mediaType = MediaType.parse("application/json");    RequestBody body = RequestBody

    .create(mediaType, "{"list":    ["xxx","yyy"]}");

    

create方法的第二个参数就是我们的对象DefaultRequestBody转换后的json字符串.

//Gson转换自动处理了字符串数组,不会出现上面那种value格式错误String json = new org.google.Gson().toJson(new DefaultRequestBody());

上面定义的接口request API中传入的是对象DefaultRequestBody,我们在okHttp的拦截器里做转换

    public class DefaultIntercept extends okhttp3.Intercept{

         @Override

        public Response intercept(Chain chain) throws IOException {

            Request request = chain.request();

            RequestBody requestBody = request.body();

            if(requestBody instanceof DefaultRequestBody){

                DefaultRequestBody defaultBody = (DefaultRequestBody)requestBody;

                String json = new Gson().toJson(defaultBody);

                MediaType mediaType = MediaType.parse("application/json");

                //生成RequestBody

                RequestBody body = RequestBody.create(mediaType,json);

                //传递body,重新生成request请求

                request = request.newBuilder().post(body).build();

            }

            return chain.proceed(request);

        }

    }

解决了传递字符串数组的问题

 

以上就介绍了JAVA的相关知识,希望对JAVA有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言JAVA频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程