Retrofit以Multipart上传参数时,String参数会多一对引号

首先看下请求接口:

@Multipart
@POST("test")
Observable<Object> sendAudioData(@Part("cid") String cid, @Part MultipartBody.Part file);

我这个接口是上传一段音频文件,同时有个字符串类型的cid参数。

下面是log:

传的cid参数是:1000011112,长度为10,但是log上看到Content-Length是12,说明两边的双引号也发过去了。

造成主要原因有两个:1、retrofit并不内置String的Converter,只有在Url、Header、普通表单字段相关的注解才会默认处理成String。2、你注册了GsonConverter,而GsonConverter是不会判断能不能处理该类型的,全部转成json,而String在json里就是 "String"的形式,所以长度变成5,Content-Type头是application/json; charset=UTF-8。

因为注册了 GsonConverter,没注册标准类型数据的转换器,导致String这些都会转成 JSON 传输,只需要加一个标准类型的转换器就行了。

implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'

.addConverterFactory(ScalarsConverterFactory.create())
// 要放在GsonConverter之前,否则还是会解析成json
.addConverterFactory(GsonConverterFactory.create())  

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页