首先看下请求接口:
@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())