我想用@QueryMap
发送多个参数(像往常一样),但这次是通过POST方法使用retrofit。
retrofit API
@POST("/request.php")
void sendRequest(@QueryMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
发送的地图
public static Map<String, String> parametersSendRequest(Context sender, Request request)
{
Map <String, String> parameters = new HashMap<>();
Operator operator = AppConfig.config().operator;
parameters.put("user_name", request.user_name);
parameters.put("user_surname", request.user_surname);
parameters.put("user_gender", request.user_gender);
parameters.put("user_relationship", request.user_relationship);
parameters.put("user_dob", request.user_dob);
parameters.put("operator_name", operator.name);
parameters.put("request_photoid", request.request_photoid);
parameters.put("request_user_content", request.request_user_content);
parameters.put("request_title", request.request_title);
parameters.put("uuid", UUID(sender));
parameters.put("response_type", "json");
parameters.put("platform", "android");
parameters.put("mode", "send");
return parameters;
}
服务器结果
{"POST":[],"GET":{"operator_name":....}}
我可以看到即使方法被发送到
POST
,@QueryMap
也会导致这些参数被以GET方式发送。即使我使用@Body
而不是@QueryMap
,retrofit仍会将我的@QueryMap
转换为JSON对象,这不是我想要的。我想做的就是在我的请求正文中发送
param1=value1¶m2=value2
,而不是一个JSON对象(使用我的Map<String, String>
)。
@Query
或@QueryMap
用于查询字符串参数,您应该使用@Body
或@Field
来处理POST负载。 - hidro