在使用retrofit2时上传带参数文件时,如
Call<SetUserInfoResult> setUserInfo( @Part("nickname") String nickname, @PartMap Map<String, RequestBody> params);
在服务端接收nickname会发现多了双引号,这个可能是由于GsonConverterFactory引起的,有两种解决办法:
第一:用RequestBody包裹nickname,如
Call<SetUserInfoResult> setUserInfo( @Part("nickname") RequestBody nickname, @PartMap Map<String, RequestBody> params);
或者直接扔进PartMap,如
Map<String, RequestBody> map = new HashMap<>();
RequestBody body = RequestBody.create(MediaType.parse("application/octet-stream"), file);
map.put("file\"; filename=\"" + file.getName() + " ", body);
map.put("nickname", RequestBody.create(null,nickname));
第二:
添加 compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
retrofit = new Retrofit.Builder()
.baseUrl(Parameters.API_SERVER + "/")
.client(client)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
这样设置后就可以直接使用String:
Call<SetUserInfoResult> setUserInfo( @Part("nickname") String nickname, @PartMap Map<String, RequestBody> params);