Bartu
Bartu

Reputation: 2210

retrofit @POST parameters are sent via GET

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&param2=value2 on my request body, instead of a JSON object (Using my Map<String, String>)

Upvotes: 3

Views: 5430

Answers (2)

voghDev
voghDev

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

Bartu
Bartu

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

Related Questions