Retrofit 2.0 Multipart Request,在包含文件的表单数据中发送布尔类型

时间:2017-05-31 19:15:29

标签: android retrofit2

我正在尝试使用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发送。

在这两种情况下,&#34; is_final&#34;在服务器端接收的是Unicode或String而不是布尔值。

实现这一目标的最佳方式是什么

1 个答案:

答案 0 :(得分:4)

我通过 -

开始工作

compile 'com.squareup.retrofit2:converter-scalars:2.1.0'添加到gradle文件中。

在创建改造实例时,添加

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