猿问

如何将 Map<String, String> 转换为 RequestBody?

使用 Retrofit 2.4.0,我正在提出@Multipart @POST请求。我正在发送一个文件@Part以及一些元数据作为@PartMap. 这就是电话的样子。


@Multipart

@POST("https://8hoot.com/my-path")

Single<Response<UploadMediaResponseModel>> uploadMedia(

        @PartMap Map<String, RequestBody> metadata,

        @Part MultipartBody.Part filePart

);

还有一个Map<String, String>,我们称之为subMetaMap,它包含相关的键值对。


我如何将其存储subMetaMap在@PartMap metadata? 如下图所示。


RequestBody subMetaMapAsRequestBody; // Convert subMetaMap to RequestBody

metadata.put("subMeta", subMetaMapAsRequestBody);

目前,我正在使用以下方法。


for (String s : subMetaMap.keySet()) {

    RequestBody requestBody = RequestBody.create(MultipartBody.FORM, subMetaMap.get(s));

    metadata.put(s, requestBody);

}

这不是理想的解决方案,因为我想要整体subMetaMap而RequestBody不是其单独的键值对


编辑 1 - 后端团队在Multipart请求期间不采用不同的 MIME 类型。所以发送JSON,MessagePack等不是一种选择。


守候你守候我
浏览 794回答 2
2回答

慕村225694

假设您有以下地图要将此数据发送到改造请求正文HashMap<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");map.put("key4", "value4");以下是 URL 请求方法:@FormUrlEncoded@POST("/yourapiname")Call<ResponseObj> methodName(@FieldMap HashMap<String, String> yourHasMapObject);如果要添加文件和哈希图,请使用以下方法:@Multipart@POST("yourapiname")Call<ResponseObj> methodName(@HeaderMap HashMap<String, String> yourHasMapObject, @Part MultipartBody.Part file);

慕桂英4014372

您应该以传递第一张地图的相同方式传递另一张地图。首先,将第二张地图的值从Stringto转换RequestBody,然后您的请求应如下所示:@Multipart@POST("https://8hoot.com/my-path")Single<Response<UploadMediaResponseModel>> uploadMedia(&nbsp; &nbsp; &nbsp; &nbsp; @PartMap Map<String, RequestBody> metadata,&nbsp; &nbsp; &nbsp; &nbsp; @PartMap Map<String, RequestBody> anotherMetaData,&nbsp; &nbsp; &nbsp; &nbsp; @Part MultipartBody.Part filePart);
随时随地看视频慕课网APP

相关分类

Java
我要回答