一起改进请求@Part和@FieldMap

时间:2018-05-02 13:36:49

标签: android retrofit

我想向服务器&发送一个帖子请求我有多个键值参数和一个像这样的文件列表:

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

我收到错误:

  

java.lang.IllegalArgumentException:@Part参数只能与多部分编码一起使用。 (参数#1)           方法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)           在java.lang.reflect.Proxy.invoke(Proxy.java:913)           在$ Proxy5.pushLocalChangesWithMultipartCall(未知来源)

我尝试用@Multipart代替@FormUrlEncoded,错误变为:

  

java.lang.IllegalArgumentException:@FieldMap参数只能与表单编码一起使用。 (参数#2)           方法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)           在java.lang.reflect.Proxy.invoke(Proxy.java:913)           在$ Proxy5.pushLocalChangesWithMultipartCall(未知来源)

P.S。 POST是一个我无法使用的PUT

1 个答案:

答案 0 :(得分:0)

如果要使用Multipart,则应使用@PartMap而不是@FieldMap

这是另一个答案中的一个例子

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