Android Retrofit 实现图文上传-文字参数类型

回顾

Android Retrofit 实现文字(参数)和多张图片一块儿上传 博客中,咱们详细介绍了多张图片和文字参数上传的具体原理和实现,今天咱们重点说说文字参数类型的问题。web

Post请求抓包信息:json

这里写图片描述

接口定义:服务器

这里写图片描述

从抓包信息中看到文字类型的参数字段名是“data”,值是“jdsjlzx”。app

其中的Content-Type信息以下:函数

Content-Type: application/json; charset=UTF-8

不管何种请求,Content-Type类型不能错。请求失败,排查错误首先从这个Content-Type开始,其次是Content-Disposition。测试

下面咱们从一个真实案例来讲一说这个Content-Type。spa

案例讲解

接口

这里写图片描述

从上面图片中就看到上传头像须要传递userId、token等参数。.net

后台接口开发人员测试接口通常在web上面调试好,移动端开发人员就能够根据接口进行联调了。3d

web端上传头像时请求抓包信息以下所示:调试

这里写图片描述

上图红色箭头所指之处就是咱们须要注意的地方。

Content-Type类型不是“application/json”,而是“text/plain”。

Content-Type: text/plain; charset=UTF-8

注意:

“@Part("data") String des”在Post请求中默认的Content-Type类型就是“application/json”

接口定义若是按照前面文章介绍的那样写,以下图所示,确定是不行的。

这里写图片描述

通过网上查资料,咱们找到了解决办法,参考:http://stackoverflow.com/ques...

解决问题

“@Part("data") String des”在Post请求中默认的Content-Type类型是“application/json”,这就说明咱们在接口中不能再使用@Part注解了,咱们须要在代码中指定类型。

上传接口定义

这里写图片描述

上传头像

主要代码以下图所示:

这里写图片描述

这里有个toRequestBody函数,主要功能是将文字参数类型转换为“text/plain”。

toRequestBody函数以下图所示:

这里写图片描述

上传头像请求结果抓包信息:

这里写图片描述

“userId”、“token”等文字参数的类型成功转换为了“text/plain”类型。

大功告成,看看服务器返回结果吧。

这里写图片描述

That's all, thank you.

相关文章
相关标签/搜索