【问题标题】:Body request with multipart多部分的正文请求
【发布时间】:2020-06-04 02:32:45
【问题描述】:

这是我的retrofit2界面

@Multipart
@PUT("webservice")
fun setProfile(
    @Part("city") city: RequestBody,
    @Part("name") name: RequestBody,
    @Part("sex") sex: RequestBody,
    @Part("birthday") birthday: RequestBody,
    @Part("about_me") aboutMe: RequestBody,
    @Part img: MultipartBody.Part
): Observable<BaseResponse>

这就是我创建这些 RequestBody 的方式:

RequestBody.create(MediaType.parse("text/plain"), body.city),
RequestBody.create(MediaType.parse("text/plain"), body.name),
RequestBody.create(MediaType.parse("text/plain"), body.sex),
RequestBody.create(MediaType.parse("text/plain"), body.birthday),
RequestBody.create(MediaType.parse("text/plain"), body.about_me),

我的网络服务获取如下数据:

Accept: application/jsonContent-Type: multipart/form-data; boundary=

Content-Disposition: form-data; name="city"    
Tokyo

Content-Disposition: form-data; name="name"   
John Smith

Content-Disposition: form-data; name="sex" 
male

Content-Disposition: form-data; name="avatar"; filename="avatar.png"
Content-Type: image/png
(img data)

当我按上述方式发送数据时,我会收到 422 错误代码和下一个描述

城市必填

所以,据我了解,网络服务无法找到这些字段。但是当我在没有 img 的情况下发送数据时,就像@Body 一样,它运行良好。有什么想法吗?

【问题讨论】:

  • 你试过这个 MediaType.parse("multipart/form-data") 而不是 MediaType.parse("text/plain")
  • @CôngHải 是的,实际上我现在就尝试过。不幸的是它不起作用
  • 尝试使用@POST 而不是@PUT
  • 在 Postman 客户端测试 API 和 edit 问题,这里附上 Postman 截图。
  • @CôngHải POST 不工作

标签: android retrofit2 multipart


【解决方案1】:

我终于解决了这个问题。我与后端开发人员进行了长时间的讨论,我们发现了一个错误。我不得不使用 POST 并将下一个字段放入 params:

params.put("_method", "PUT")

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多