多部分正文请求
Body request with multipart
这是我的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>
这就是我创建这些 RequestBodies 的方式:
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 一样,它运行良好。有什么想法吗?
我终于解决了这个问题。我与后端开发人员进行了长时间的讨论,我们发现了一个错误。我不得不使用 POST 并将下一个字段放入参数中:
params.put("_method", "PUT")
这是我的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>
这就是我创建这些 RequestBodies 的方式:
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 一样,它运行良好。有什么想法吗?
我终于解决了这个问题。我与后端开发人员进行了长时间的讨论,我们发现了一个错误。我不得不使用 POST 并将下一个字段放入参数中:
params.put("_method", "PUT")