2016-11-09 15 views
0

我在我的應用程序中使用改進來發送POST請求,但參數正在發送兩次,我找不到原因。改裝2發送重複的參數

這是我的API:

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參數的形式發送數據。如果我使用查詢註釋,數據將作爲URL中的查詢參數發送,這不是主意。 – VorteXavier

+0

@VorteXavier好吧,我明白了。當你通過郵差發送郵件時,你也可以將它作爲JSON發送或作爲表單參數發送? –

+0

是的,我將它們視爲表單參數。我會盡力將它作爲Json明天發送。 – VorteXavier

0

所以我想通了。最後,這是一個與改造無關的服務器端問題。在服務器中,我使用的是Ruby on Rails 4,並且在發送的POST請求中,參數被封裝爲Json(這是使用@ Body註釋時所做的改進)。

問題是Rails控制器會自動包裝與控制器名稱相同的所有參數(在我的情況下爲'registro')。這隻發生在參數以Json形式發送時,這就是爲什麼通過POSTman發送的請求沒有這個問題。

這裏是一個崗位#1給出關於這個問題的進一步的解釋: Rails 3 params unwanted wrapping

結論:這個問題要改造,也okhttp是不相關;這是我的服務器中的特定行爲。