提问者:小点点

一起改造请求@Part和@FieldMap


我想向服务器发送帖子请求

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

我得到一个错误:

java. lang.IllegalArgumentException:@Part参数只能与多部分编码一起使用。(参数#1)用于方法IRestApi.pushLocalChangesWellMultipartCall在Retrofit 2。ServiceMethod$Builder.方法错误(ServiceMethod.java:752)在Retrofit 2。ServiceMethod$Builder.方法错误(ServiceMethod.java:743)在Retrofit 2。ServiceMethod$Builder.参数错误(ServiceMethod.java:761)在Retret2。ServiceMethod$Builder.parseParameterAnnotion(ServiceMethod.java:592)在Retice2。ServiceMethod$Builder.parseParameter(ServiceMethod.java:336)在Retfit 2。ServiceMethod$Builder.build(ServiceMethod.java:204)在Retrofit 2。Retrofit.loadServiceMethod(Retrofit.java:170)在Retrofit 2。Retrofit 1 dol.invoke(Retrofit.java:147)在java.lang.反射.Proxy.invoke(Proxy.java:913)在$Proxy5.pushLocalChangesWellMultipartCall(未知来源)

我尝试将@Multipart放在@FormUrlEncoded的位置,错误变成:

java. lang.IllegalArgumentException:@FieldMap参数只能与表单编码一起使用。(参数#2)用于方法IRestApi.pushLocalChangesWellMultipartCall在Retrofit 2。ServiceMethod$Builder.方法错误(ServiceMethod.java:752)在Retrofit 2。ServiceMethod$Builder.方法错误(ServiceMethod.java:743)在Retrofit 2。ServiceMethod$Builder.参数错误(ServiceMethod.java:761)在Retice2。ServiceMethod$Builder.parseParameterAnnotion(ServiceMethod.java:567)在Retice2。ServiceMethod$Builder.parseParameter(ServiceMethod.java:336)在Retfit 2。ServiceMethod$Builder.build(ServiceMethod.java:204)在Retrofit 2。Retrofit.loadServiceMethod(Retrofit.java:170)在Retrofit 2。Retrofit 1 dol.invoke(Retrofit.java:147)在java.lang.反射.Proxy.invoke(Proxy.java:913)在$Proxy5.pushLocalChangesWellMultipartCall(未知来源)

p. s.POST是一个我不能使用PUT的多媒体


共1个答案

匿名用户

如果你想使用Multipart,那么你应该使用@PartMap而不是@FieldMap

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

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