改造 @POST 参数通过 GET 发送

Bar*_*rtu 3 android json http retrofit

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

改造API

@POST("/request.php")
void sendRequest(@QueryMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
Run Code Online (Sandbox Code Playgroud)

正在发送的地图

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;
}
Run Code Online (Sandbox Code Playgroud)

服务器结果

{"POST":[],"GET":{"operator_name":....}}
Run Code Online (Sandbox Code Playgroud)

我可以看到,即使该方法被发送到POST@QueryMap也会导致这些参数通过 GET 发送。即使当我使用@Body而不是 时@QueryMap,retrofit 也会将我的 @QueryMap 转换为 JSON 对象,这不是我想要的。

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

Bar*_*rtu 5

@FormUrlEncoded使用 POST (和@FieldMap)发送参数

@FormUrlEncoded
@POST("/request.php")
void sendRequest(@FieldMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
Run Code Online (Sandbox Code Playgroud)