2016-11-09 4 views
0

Я использую модификацию в своем приложении для отправки запроса POST, но параметры отправляются дважды, и я не могу найти причину.Retrofit 2 отправка дублированных параметров

Это мой апи:

public interface ChoferesApi { 
    @POST("myurl/") 
    Call<Chofer> registroChofer(@Body Chofer chofer); 
} 

Мой объект POJO:

public class Chofer { 
    private String apellido; 
    private String nombre; 
    private String email; 
    private int dni; 
    private String sexo; 
    private Date fechaNacimiento; 
    private String password; 

    //Getters & Setters... 

}

Запрос:

Call<Chofer> call = RestClient.getInstance().registroChofer(chofer); 
call.enqueue(new Callback<Chofer>() { ... }); 

В LogCat я вижу только параметры один раз (согласно okhttp):

11-09 18:46:53.170 27197-27742/com.mypackage D/OkHttp: --> POST http://192.168.1.5:3000/myurl http/1.1 
    11-09 18:46:53.170 27197-27742/com.mypackage D/OkHttp: Content-Type: application/json; charset=UTF-8 
    11-09 18:46:53.170 27197-27742/com.mypackage D/OkHttp: Content-Length: 139 
    11-09 18:46:53.170 27197-27742/com.mypackage D/OkHttp: {"apellido":"aaa","sexo":"masculino","email":"[email protected]","fecha_nacimiento":"2016-10-09","nombre":"aaa","password":"effdggffy","dni":1234564} 
    11-09 18:46:53.170 27197-27742/com.mypackage D/OkHttp: --> END POST (139-byte body) 

Но в моем сервере, получены следующие параметры:

Started POST "/myurl" for 192.168.1.13 at 2016-11-09 16:39:05 -0300 
Cannot render console from 192.168.1.13! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by MyController#myaction as HTML 
Parameters: {"apellido"=>"gh", "sexo"=>"masculino", "email"=>"[email protected]", "fecha_nacimiento"=>"2016-10-09", "nombre"=>"ggg", "password"=>"[FILTERED]", "dni"=>54577457, "registro"=>{"apellido"=>"gh", "sexo"=>"masculino", "email"=>"[email protected]", "fecha_nacimiento"=>"2016-10-09", "nombre"=>"ggg", "password"=>"[FILTERED]", "dni"=>54577457}} 

Как можно видеть, параметры посылаются дважды, второй раз в объекте под названием «Registro», и я могу Подумайте, почему. Я попытался отправить тот же запрос, используя POSTMAN, и параметры отправляются только один раз, поэтому это НЕ проблема на стороне сервера.

ответ

1

Вы отправляете как @body (и Ваш POJO вероятно разбора JSON) не @Query параметров, так что, возможно, что это проблема?

+0

Да, мой класс POJO обрабатывается JSON. Я использую аннотацию Body, потому что я хочу отправить данные как параметры POST. Если бы я использовал аннотацию Query, данные были бы отправлены в качестве параметров запроса в URL-адресе, что не является идеей. – VorteXavier

+0

@ VorteXavier Хорошо, я понимаю. И когда вы отправляете его Postman, вы отправляете его как JSON или как параметры формы? –

+0

Да, я рассматриваю их как параметры формы. Я постараюсь отправить его как Джсона завтра. – VorteXavier

0

Итак, я понял. В конце концов, это была проблема на стороне сервера, не связанная с модификацией. На сервере я использую Ruby on Rails 4, а в POST-запросе, который я отправляю, параметры меняются как Json (это то, что модифицируется при использовании аннотации @Body).

Проблема заключалась в том, что контроллеры Rails автоматически обертывают все параметры, отправленные по объекту с тем же именем, что и контроллер (в моем случае: 'registro'). Это происходит только тогда, когда параметры отправляются как Json, поэтому запрос, отправленный через POSTman, не имел этой проблемы.

Вот пост Stackoverflow дает дальнейшее разъяснение по этому вопросу: Rails 3 params unwanted wrapping

Вывод: проблема не была связана с дооснастить ни okhttp; это было специфическое поведение на моем сервере.