为 Android 中的多部分 form-data 请求更新默认值 Content-Type

Update default Content-Type for multipart form-data request in Android

我们目前正在 Android 中使用 okhttp3 和 retrofit2 进行网络 api 类型 POST 调用 multipart/form-data,api 请求和回复如下图

如果您观察,请求 header Content-Type 有“multipart/form-data; boundary=xxxxxx-xxxx-xxx....

代码如下

@Multipart
@POST("/some-api-method")
Call<SomeResponseBody> someCreateMethod(@PartMap Map<String, RequestBody> options);

我在发送自定义请求 header Content-Type 作为“multipart/form-data; **charset=utf-8;** boundary=xxxxx-xxxxx-x.....”时遇到问题 基本上我需要更新 Content-Type header 以适应“charset=utf-8;” 为此,我尝试了以下代码

@Multipart
@POST("/some-api-method")
@Headers({
        "Content-Type: multipart/form-data; charset=utf-8"
})
Call<SomeResponseBody> someCreateMethod(@PartMap Map<String, RequestBody> options);

这导致将“charset=utf-8;”添加到 Content-Type,但这导致删除或不添加现有属性“boundary=xxx-xxxx.....;

基本上我需要像下面这样的东西

Content-Type : "multipart/form-data; charset=utf-8; boundary=xxxx-xxx.....;"

任何帮助实现这一点的人都将不胜感激。

感谢 & 这些为我指明了正确的方向,我已通过以下方式解决了我的问题

 @POST("/some-api-method")
 Call< SomeResponseBody > someCreateMethod(@Header("Content-Type") String contentType, @Body RequestBody body);

我创建了如下的 MultipartBody 对象

RequestBody dataBody = RequestBody.create(okhttp3.MultipartBody.FORM, mGson.toJson(mData));
MultipartBody multipartBody = new MultipartBody.Builder()
       .addPart(MultipartBody.Part.createFormData("key1", null, requestBodyObj1))
       .addPart(MultipartBody.Part.createFormData("key2", null, requestBodyObj2))
       .addPart(MultipartBody.Part.createFormData("key3", null, dataBody))
       .build();
String contentType = "multipart/form-data; charset=utf-8; boundary=" + multipartBody.boundary();
        
someCreateMethod(contentType, multipartBody);