Retrofit 2.0 Multipart请求,以形式数据(包括文件)发送布尔值类型



我正在尝试使用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);

最新更新