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())  

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值