改造2发送重复的参数

时间:2016-11-09 19:57:48

标签: android retrofit2 okhttp3

我在我的应用中使用改装发送POST请求,但参数被发送两次,我找不到原因。

这是我的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":"a@a.com","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"=>"a@a.com", "fecha_nacimiento"=>"2016-10-09", "nombre"=>"ggg", "password"=>"[FILTERED]", "dni"=>54577457, "registro"=>{"apellido"=>"gh", "sexo"=>"masculino", "email"=>"a@a.com", "fecha_nacimiento"=>"2016-10-09", "nombre"=>"ggg", "password"=>"[FILTERED]", "dni"=>54577457}}

可以看出,参数被发送两次,第二次被称为&#34; registro&#34;我无法弄清楚原因。我尝试使用POSTMAN发送相同的请求,参数只发送一次,所以这不是服务器端问题。

2 个答案:

答案 0 :(得分:1)

您将其发送为 @Body (并且您的POJO可能正在解析为JSON)而不是 @Query 参数,所以这可能是个问题吗?

答案 1 :(得分:1)

所以我明白了。最后,这是一个与改造无关的服务器端问题。在服务器中我使用Ruby on Rails 4,在POST请求中,我发送的参数被包装为Json(这是使用 @Body 时改造的功能注解)。

问题是Rails控制器会自动包装一个与控制器同名的对象周围发送的所有参数(在我的例子中:&#39; registro&#39;)。这仅在参数作为Json发送时发生,这就是我通过POSTman发送的请求没有出现此问题的原因。

以下是Stackoverflow帖子,对该主题进行了进一步说明: Rails 3 params unwanted wrapping

结论:这个问题与改造和okhttp无关;这是我服务器中的特定行为。

相关问题