【问题标题】:retrofit @POST parameters are sent via GET改造 @POST 参数通过 GET 发送
【发布时间】:2015-03-06 03:56:51
【问题描述】:

我正在尝试使用 @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,retrofit 也会将我的 @QueryMap 转换为 JSON 对象,这不是我想要的。

我想要做的就是在我的请求正文上发送param1=value1&amp;param2=value2,而不是 JSON 对象(使用我的Map&lt;String, String&gt;

【问题讨论】:

  • @Query@QueryMap 用于查询字符串参数,您应该使用 @Body@Field 用于 POST 负载。
  • @hidro 感谢您的提示,让我找到了解决方案 :)
  • 我要全面改造@POST 参数

标签: android json http retrofit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这个适合我

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

    特别注意“profile”后面的最后一个斜杠。我遇到了问题,因为我没有添加它。希望对您有所帮助。

    【讨论】:

    • @POST("/profile/") ,这里你不需要在最后应用 / ,这将由改造库本身来处理
    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 2013-12-07
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多