Запрос на модификацию @Part и @FieldMap вместе - PullRequest
0 голосов
/ 02 мая 2018

Я хотел бы отправить запрос на сервер, и у меня есть несколько параметров ключа и список файлов, например:

@FormUrlEncoded
@POST("index.php")
Call<MyObjResponse> myCall(@Part List<MultipartBody.Part> files, @FieldMap Map<String, String> params);

Я получаю ошибку:

java.lang.IllegalArgumentException: параметры @Part могут использоваться только с многочастным кодированием. (параметр № 1) для метода IRestApi.pushLocalChangesWithMultipartCall в retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod.java:752) в retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod.java:743) в retrofit2.ServiceMethod $ Builder.parameterError (ServiceMethod.java:761) в retrofit2.ServiceMethod $ Builder.parseParameterAnnotation (ServiceMethod.java:592) в retrofit2.ServiceMethod $ Builder.parseParameter (ServiceMethod.java:336) в retrofit2.ServiceMethod $ Builder.build (ServiceMethod.java:204) в retrofit2.Retrofit.loadServiceMethod (Retrofit.java:170) на retrofit2.Retrofit $ 1.invoke (Retrofit.java:147) в java.lang.reflect.Proxy.invoke (Proxy.java:913) at $ Proxy5.pushLocalChangesWithMultipartCall (неизвестный источник)

Я попытался поставить @Multipart вместо @FormUrlEncoded, и ошибка стала:

java.lang.IllegalArgumentException: параметры @FieldMap можно использовать только с кодировкой формы. (параметр № 2) для метода IRestApi.pushLocalChangesWithMultipartCall в retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod.java:752) в retrofit2.ServiceMethod $ Builder.methodError (ServiceMethod.java:743) в retrofit2.ServiceMethod $ Builder.parameterError (ServiceMethod.java:761) в retrofit2.ServiceMethod $ Builder.parseParameterAnnotation (ServiceMethod.java:567) в retrofit2.ServiceMethod $ Builder.parseParameter (ServiceMethod.java:336) в retrofit2.ServiceMethod $ Builder.build (ServiceMethod.java:204) в retrofit2.Retrofit.loadServiceMethod (Retrofit.java:170) на retrofit2.Retrofit $ 1.invoke (Retrofit.java:147) в java.lang.reflect.Proxy.invoke (Proxy.java:913) at $ Proxy5.pushLocalChangesWithMultipartCall (неизвестный источник)

p.s. POST это мульт, который я не могу использовать PUT

1 Ответ

0 голосов
/ 21 сентября 2018

Если вы хотите использовать Multipart, вам следует использовать @PartMap вместо @FieldMap

Вот пример в другом ответе

https://stackoverflow.com/a/40136931/8479132

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...