我正在尝试使用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而不是布尔值。
实现这一目标的最佳方式是什么
答案 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);