为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么Retrofit以Mutipart上传参数时,String参数会多一对双引号

请问为什么Retrofit以Mutipart上传参数时,String参数会多一对双引号

鸿蒙传说 2019-05-25 17:04:19
这是我的ActivitypublicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Observablea=fileRetrofit().create(ApiStores.class).addCase2("123",1234);a.subscribeOn(Schedulers.io()).subscribe(newConsumer(){@Overridepublicvoidaccept(Objecto)throwsException{}});}publicstaticRetrofitmFileRetrofit;publicstaticRetrofitfileRetrofit(){if(mFileRetrofit==null){OkHttpClient.Builderbuilder=newOkHttpClient.Builder().addInterceptor(newLoggingInterceptor());OkHttpClientokHttpClient=builder.build();mFileRetrofit=newRetrofit.Builder().baseUrl(ApiStores.BASE_URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).client(okHttpClient).build();}returnmFileRetrofit;}}这是接口publicinterfaceApiStores{//baseUrlStringBASE_URL="http://123.12.123.123/";@Multipart@POST("qwe/asd")ObservableaddCase2(@Part("tag")Stringtag,@Part("tag2")inttag2);}一下是LOG”requestSendingrequesthttp://123.12.123.123/qwe/asdonnull--369f49f5-597d-4aa2-9c5e-86eccda84c88Content-Disposition:form-data;name="tag"Content-Transfer-Encoding:binaryContent-Type:application/json;charset=UTF-8Content-Length:5"123"--369f49f5-597d-4aa2-9c5e-86eccda84c88Content-Disposition:form-data;name="tag2"Content-Transfer-Encoding:binaryContent-Type:application/json;charset=UTF-8Content-Length:41234--369f49f5-597d-4aa2-9c5e-86eccda84c88--可以看到content-length为5,即为“123”的长度,两边的双引号也被发送过去了
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

“@Part(“data”)Stringdes”在Post请求中默认的Content-Type类型是“application/json”,这就说明我们在接口中不能再使用@Part注解了
@Multipart@POST("userPhoto")Observable>uploadMultipleTypeFile(@PartMapMapparams);
MapbodyMap=newHashMap<>();bodyMap.put("photo";filename=""+file.getName(),RequestBody.create(MediaType.parse("image/png"),file));bodyMap.put("userId",toRequestBody(userId));bodyMap.put("serialNumber",toRequestBody(serialNumber));
publicstaticRequestBodytoRequestBody(Stringvalue){
RequestBodyrequestBody=RequestBody.create(MediaType.parse("text/plain"),value);
returnrequestBody;
}
                            
查看完整回答
反对 回复 2019-05-25
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

造成的主要原因有两个:1、retrofit并不内置String的Converter,只有在Url、Header、普通表单字段相关的注解才会默认处理成String。2、你注册了GsonConverter,而GsonConverter是不会判断能不能处理该类型的,全部转成json,而String在json里就是"String"的形式,所以长度变成5,Content-Type头是application/json;charset=UTF-8
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 924 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号