【发布时间】:2018-09-22 01:05:14
【问题描述】:
我想向服务器发送一个发布请求,我有多个键值参数和一个文件列表,如下所示:
@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) 在 $Proxy5.pushLocalChangesWithMultipartCall(Unknown Source)
我尝试用@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) 在 $Proxy5.pushLocalChangesWithMultipartCall(Unknown Source)
附言POST 是一个 mult 我不能用 PUT
【问题讨论】: