【问题标题】:@Part parameters can only be used with multipart encoding. (parameter #8)@Part 参数只能与多部分编码一起使用。 (参数#8)
【发布时间】:2017-01-05 00:58:00
【问题描述】:

在我在这里发布这个问题之前,我已经尝试在上面的接口方法中添加@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

【问题讨论】:

标签: android retrofit multipartentity


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我们仅将 @QueryGet 请求一起使用,实际上 @Query 在 URL 末尾附加参数,请参阅 Document 示例。

    如果您需要将用户配置文件发送到服务器,请使用MultiPart

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

    【讨论】:

    • 我仍然收到错误@Body parameters cannot be used with form or multi-part encoding. (parameter #9)。这是因为最后一个参数中有@Body
    猜你喜欢
    • 2016-08-26
    • 2015-02-03
    • 1970-01-01
    • 2017-03-09
    • 2020-04-28
    • 2013-01-03
    • 2014-04-20
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多