@Part参数只能与多部分编码一起使用。 (参数#8)

时间:2016-08-29 04:57:17

标签: android retrofit multipartentity

在此处发布此问题之前,我尝试在接口方法上面添加@Multipart并且在stackoverflow中搜索仍然找不到类似于我的问题。

在这种情况下,我尝试使用TypedFile将图像发送到服务器。我的界面方法如下所示:

 @Headers({"Content-type: application/json"})
    @POST("/user/change")
    void postChange(@Query("name") String name, @Query("email") String  email, @Query("password") String password, @Query("phone") String phone, @Query("user_id") String userId, @Query("address[]") String[] listAddress, @Query("head[]") String[] head, @Part("photo_profile") TypedFile photoProfile, @Body TypedInput jsonObject, Callback<ReceiveDTO> callback);

修改

在该方法中,我们可以看到@Part@Body。如果我在方法上方添加@Multipart,我们会抛出错误@Body parameters cannot be used with form or multi-part encoding. (parameter #9)

我正在使用 Retrofit 1.9

2 个答案:

答案 0 :(得分:11)

我们仅在Get请求使用 @Query ,实际上 @Query 在网址末尾附加参数,请参阅Document示例。

如果您需要将用户个人资料发送到服务器,请使用MultiPart

  

多部件使用Retrofit的转换器之一或者他们可以实现   RequestBody处理自己的序列化。

例如,在下面的代码中,我们可以向服务器发送带有一些描述的个人资料照片:

@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

您甚至可以使用@Part添加更多其他属性。请参阅完整示例here,其中逐步说明了如何执行此操作。

修改:正如JackWarthon解释here @Body 注释定义了一个请求正文。

interface Foo {
  @POST("/jayson")
  FooResponse postJson(@Body FooRequest body);
}

答案 1 :(得分:6)

对于遇到相同问题的任何人,请确保在@ POST / @ PUT上方添加@Multipart批注。我遇到了同样的错误,而我的问题只是我缺少该注释