Reputation: 2210
I am trying to send multiple parameters (as I usually do) with @QueryMap
but via POST this time using retrofit.
Retrofit API
@POST("/request.php")
void sendRequest(@QueryMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
Map that is being send
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;
}
Server result
{"POST":[],"GET":{"operator_name":....}}
I can see that even the method is sent to POST
, @QueryMap
causes these parameters to be sent over GET. Even when I use @Body
instead of @QueryMap
, retrofit converts my @QueryMap to a JSON object, which is not I want.
All I want to do is to send param1=value1¶m2=value2
on my request body, instead of a JSON object (Using my Map<String, String>
)
Upvotes: 3
Views: 5430
Reputation: 5791
This one works for me
@FormUrlEncoded
@POST("/profile/")
void getUserProfile(@Field("whatever")String whatever, Callback<Response> callback);
Pay special attention to the final slash after "profile". I had problems because I was not adding it. Hope it helps.
Upvotes: 1
Reputation: 2210
to send parameters using POST (@FormUrlEncoded
and @FieldMap
)
@FormUrlEncoded
@POST("/request.php")
void sendRequest(@FieldMap Map<String, String> parameters, retrofit.Callback<RequestSendResponse> callback);
Upvotes: 5