这是我的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(@PartMapMap params); 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;}

凤凰求蛊
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
添加回答
举报
0/150
提交
取消