改造Android @Multipart删除默认标题

bb4*_*1db 5 java rest android multipartform-data retrofit2

发出@Multipart请求会为每个部分添加这些默认标头(Content-Transfer-Encoding,Content-Type),是否可以删除它们?

//REQUEST BODY
--25d35373-d2c3-46a3-969f-f5a1fd5f781a 
Content-Disposition: form-data; name="client_id"
Content-Transfer-Encoding: binary <-- remove this one
Content-Type: application/json; charset=UTF-8 <-- remove this one
Content-Length: 34
"40ccfee680a844780a41fbe23ea89934"
//
Run Code Online (Sandbox Code Playgroud)

注意:我无权访问服务器,因此无法使服务器接受这些标头。

ily*_*lya 3

你可以通过这种方式自己构建多部分主体(kotlin代码,但同样的想法可以用java表达):

val mpart = MultipartBody.Builder()
            .addFormDataPart("param", paramValue)
            .addPart(null, someRequestBody).build() // <-- (*) see explanation below

//thus, service method should looks like this:
@POST("upload/endpoint")
fun upload(@Body parts: MultipartBody)
Run Code Online (Sandbox Code Playgroud)

(*) - 这是addPart(headers: Headers, reqBody: RequestBody)方法,当您传递null给 headers arg 时,这会删除除Content-Length: