改造@POST参数通过GET方式发送
retrofit @POST parameters are sent via GET
我正在尝试使用 @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¶m2=value2
,而不是 JSON 对象(使用我的 Map<String, String>
)
使用 POST(@FormUrlEncoded
和 @FieldMap
)发送参数
@FormUrlEncoded
@POST("/request.php")
void sendRequest(@FieldMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
这个适合我
@FormUrlEncoded
@POST("/profile/")
void getUserProfile(@Field("whatever")String whatever, Callback<Response> callback);
请特别注意 "profile" 之后的最后一个斜线。我有问题,因为我没有添加它。希望对你有帮助。
我正在尝试使用 @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¶m2=value2
,而不是 JSON 对象(使用我的 Map<String, String>
)
使用 POST(@FormUrlEncoded
和 @FieldMap
)发送参数
@FormUrlEncoded
@POST("/request.php")
void sendRequest(@FieldMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
这个适合我
@FormUrlEncoded
@POST("/profile/")
void getUserProfile(@Field("whatever")String whatever, Callback<Response> callback);
请特别注意 "profile" 之后的最后一个斜线。我有问题,因为我没有添加它。希望对你有帮助。