JAVA语言之okhttp传递数组参数
白羽 2018-07-09 来源 :网络 阅读 24 评论 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交流圈
JAVA工程师交流群 +加入
大数据架构师交流群 +加入
人工智能Python交流群 +加入
WEB/H5前端交流群 +加入
大数据岗位高薪定向就业名额  提前锁定高薪职位
编程语言直通车

  • 资料索取

  • 答疑解惑

  • 技术交流

  • 职业测评

  • 面试技巧

  • 高薪秘籍
海同名师推荐 更多>>
张军 联系TA
10年项目开发经验,精通pc、mobile平台软件开发主流技术和框架
杨成江 联系TA
青春为马 不负韶华
翟健 联系TA
熟悉系大型项目开发业务流程,精通C、Java语言
黄骈 联系TA
认证System Analyst,System Architect
程光淼 联系TA
精通C、C++等语言、智能芯片开发
热门就业培训班 更多>>
【零基础】人工智能+Python全栈开发课程
登顶技术风口浪潮巅峰 年薪百万不是梦
【零基础】JavaEE高级开发工程师课程
小白0基础入学 8000起薪轻松进名企
【零基础】大数据与分布式架构师课程
掌握大数据分布式架构 冲击年薪50W+
JAVA30天热搜词 更多>>
X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

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