【问题标题】:Using @FieldMap and @Part in single request in Retrofit2 gets java.lang.IllegalArgumentException: Only one encoding annotation is allowed.for method在 Retrofit2 的单个请求中使用 @FieldMap 和 @Part 得到 java.lang.IllegalArgumentException: Only one encoding annotation is allowed.for 方法
【发布时间】:2016-10-02 19:24:15
【问题描述】:

这似乎与之前的问题相似,但没有一个真正回答我的问题。 我需要使用 retrofit2 在一个请求中发布多个字段和多个图像,我收到此错误

java.lang.IllegalArgumentException: Only one encoding annotation is allowed.for method xxx

我正在使用

@Multipart
@FormUrlEncoded

因为@Field 需要@FormUrlEncoded 而@Part 需要@Multipart。 更合乎逻辑的做法是删除 @FormUrlEncoded 注释,但我该如何从那里开始。 现在的问题是我如何完成任务以实现在单个请求中发送我的帖子。

界面如下

@Multipart
@FormUrlEncoded
@POST("upload")
Call<ResponseBody> uploadPost(@FieldMap Map<String, String> map,
                       @Part MultipartBody.Part image1,
                       @Part MultipartBody.Part image2,
                       @Part MultipartBody.Part image3);

【问题讨论】:

    标签: android retrofit retrofit2


    【解决方案1】:
    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadPost(
            @PartMap() Map<String, RequestBody> descriptions,
            @Part List<MultipartBody.Part> images);
    

    使用这个界面。

    【讨论】:

    • 为什么 Map 中有 RequestBody 不能用 String
    • 是的,您可以使用它。但为此你必须使用字符串转换器看看这篇文章link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2018-11-07
    • 2020-06-29
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多