Используя 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 - Бэкэнд-команда не принимает разные типы MIME во время запроса Multipart
. Поэтому отправка JSON
, MessagePack
и т. Д. Невозможна.