Я хотел бы отправить почтовый запрос на сервер, и у меня есть несколько параметров ключ-значение и список таких файлов:
@FormUrlEncoded
@POST("index.php")
Call<MyObjResponse> myCall(@Part List<MultipartBody.Part> files, @FieldMap Map<String, String> params);
Я получаю сообщение об ошибке:
java.lang.IllegalArgumentException: @Part parameters can only be used with multipart encoding. (parameter #1) for method IRestApi.pushLocalChangesWithMultipartCall at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752) at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743) at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:761) at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:592) at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336) at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204) at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) at retrofit2.Retrofit$1.invoke(Retrofit.java:147) at java.lang.reflect.Proxy.invoke(Proxy.java:913) at $Proxy5.pushLocalChangesWithMultipartCall(Unknown Source)
Я попытался поставить @Multipart
вместо @FormUrlEncoded
, и ошибка стала:
java.lang.IllegalArgumentException: @FieldMap parameters can only be used with form encoding. (parameter #2) for method IRestApi.pushLocalChangesWithMultipartCall at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752) at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743) at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:761) at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:567) at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336) at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204) at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) at retrofit2.Retrofit$1.invoke(Retrofit.java:147) at java.lang.reflect.Proxy.invoke(Proxy.java:913) at $Proxy5.pushLocalChangesWithMultipartCall(Unknown Source)
p.s. POST
- это мульт, я не могу использовать PUT
Если вы хотите использовать Multipart
, вам следует использовать @PartMap
вместо @FieldMap
.
Вот пример в другом ответе