改造@POST参数通过GET发送

时间:2015-03-06 03:56:51

标签: android json http retrofit

我正在尝试使用@QueryMap发送多个参数(我通常这样做),但这次使用改造通过POST。

改造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,改造也会将我的@QueryMap转换为JSON对象,这不是我想要的。

我想做的就是在我的请求体上发送param1=value1&param2=value2,而不是JSON对象(使用我的Map<String, String>

2 个答案:

答案 0 :(得分:2)

使用POST(@FormUrlEncoded@FieldMap

发送参数
@FormUrlEncoded
@POST("/request.php")
void sendRequest(@FieldMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);

答案 1 :(得分:1)

这个适用于我

@FormUrlEncoded
@POST("/profile/")
void getUserProfile(@Field("whatever")String whatever, Callback<Response> callback);

在&#34; profile&#34;之后要特别注意最后的斜线。我有问题,因为我没有添加它。希望它有所帮助。