2015-03-06 4 views
2

Я пытаюсь отправить несколько параметров (как обычно) с @QueryMap, но через POST на этот раз с использованием модификации.Параметры retrofit @POST отправляются через GET

дооснащения 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&param2=value2 на моем теле запроса, вместо объекта JSON (с помощью моего Map<String, String>)

+0

'@ Query' или' @ QueryMap' для параметров строки запроса, вы должны использовать '@ Body' или' @ Field' для полезной нагрузки POST. – hidro

+0

@hidro спасибо за подсказку, которая приведет меня к решению :) – Bartu

+0

Я хочу полностью модифицировать параметры @POST –

ответ

2

отправить параметры с помощью POST (@FormUrlEncoded и @FieldMap)

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

Это один работает для меня

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

Обратите особое внимание на окончательную косую черту после «профиля». У меня были проблемы, потому что я не добавлял их. Надеюсь, поможет.

+0

@POST ("/ profile /"), здесь вам не нужно применять/в конце, что будет позабочено модифицировать сам себя – dhams

Смежные вопросы