【问题标题】:Update default Content-Type for multipart form-data request in Android更新 Android 中多部分表单数据请求的默认 Content-Type
【发布时间】:2021-10-03 12:55:10
【问题描述】:

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

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

下面是代码

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

我在将自定义请求标头 Content-Type 发送为“multipart/form-data; **charset=utf-8;** boundary=xxxxx-xxxxx-x.....”时遇到问题 基本上我需要更新 Content-Type 标头以适应“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.....;"

我们将不胜感激。

【问题讨论】:

    标签: java android retrofit multipartform-data okhttp


    【解决方案1】:

    感谢 Retrofit - Multipart request: Required MultipartFile parameter 'file' is not present & https://stackoverflow.com/a/51647665/932044 这些为我指明了正确的方向,我通过以下方式解决了我的问题

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

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2012-11-27
      • 2016-12-17
      • 2012-03-16
      相关资源
      最近更新 更多