我正在尝试使用Retrofit 2.0上传文件。除了文件外,我还有其他一些参数可以带有表单数据,其中还包括布尔类型。我的要求声明是 -
@Multipart
@POST("/upload/abc")
Call<UploadResponse> uploadToServer(@Part("img_file";filename="image") RequestBody file,
@Part("access_token") RequestBody sessionKey,
@Part("is_final") Boolean isFinal,
@Part("sequence_id") Integer sequenceId,
@Part("entity_id") RequestBody entityId,
@Part("image_type") RequestBody imageType);
我正在使用gsonconverterfactory。我尝试了两种方法 -
(1(而不是@Part("is_final") Boolean isFinal
我使用@Part("is_final") RequestBody isFinal
并使用RequestBody.create(MediaType.parse("text/plain"), String.valueOf(true))
(2(使用 @Part("is_final") Boolean isFinal
并与boolean.true一起发送。
在两种情况下,在服务器端接收到的" is_final"是Unicode或字符串而不是布尔值。
实现此
我使它起作用 -
将compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
添加到Gradle文件中。
创建Raturofit实例时,添加
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.client(builder.build())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
现在您可以安全地发送请求的原始类型。
示例请求
Call<UploadResponse> uploadFile(@Part("img"; filename="image") RequestBody file,
@Part("session_key") String sessionKey,
@Part("is_final") Boolean isFinal);
使用 -
调用此方法RequestBody fBody = RequestBody.create(null, someFile);
service.uploadFile(fBody, "some_string_session", true);