为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2021-12-22 19:36:08
使用 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 RequestBodymetadata.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等不是一种选择。
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

假设您有以下地图要将此数据发送到改造请求正文


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



查看完整回答
反对 回复 2021-12-22
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您应该以传递第一张地图的相同方式传递另一张地图。


首先,将第二张地图的值从Stringto转换RequestBody,然后您的请求应如下所示:


@Multipart

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

Single<Response<UploadMediaResponseModel>> uploadMedia(

        @PartMap Map<String, RequestBody> metadata,

        @PartMap Map<String, RequestBody> anotherMetaData,

        @Part MultipartBody.Part filePart

);


查看完整回答
反对 回复 2021-12-22
  • 2 回答
  • 0 关注
  • 793 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号