Retrofit POST con un objeto json que contiene parámetros

Estoy utilizando Retrofit para enviar una solicitud POST a mi servidor:

 @POST("/login") void login( @Body User user ,Callback<User> callback); 

Donde mi objeto de user sólo tiene campos de email y password .

Comprobando los registros, puedo ver que mis parámetros se envían con este formato:

 D/Retrofit﹕{"email":"[email protected]","password":"asdfasdf"} 

¿Qué debo hacer para que mis parámetros sean enviados así?

 {"user" : {"email":"[email protected]","password":"asdfasdf"} } 

EDIT: Haciendo la manera correcta, usando un JsonSerializer personalizado:

 public class CustomGsonAdapter { public static class UserAdapter implements JsonSerializer<User> { public JsonElement serialize(User user, Type typeOfSrc, JsonSerializationContext context) { Gson gson = new Gson(); JsonElement je = gson.toJsonTree(user); JsonObject jo = new JsonObject(); jo.add("user", je); return jo; } } } 

Y luego, en su constructor Cliente API:

 public static RestApiClient buildApiService() { Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .registerTypeAdapter(User.class, new CustomGsonAdapter.UserAdapter()) .create(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(API_URL) .setConverter(new GsonConverter(gson)) .build(); return restAdapter.create(MudamosApi.class); } 

El modo más sencillo para resolver su problema es crear una clase RequestPOJO, por ejemplo:

Archivo User.java:

 public class User{ public String email; public String password; } 

Archivo LoginRequestPojo.java:

 public class LoginRequestPojo{ public User user; public LoginRequestPojo(User user){ this.user = user; } } 

Y, en su retrofit 2 solicitud:

 @POST("/login") void login( @Body LoginRequestPojo requestPojo, Callback<User> callback); 

Finalmente, su cuerpo de la petición:

{"user":{"email":"[email protected]","password":"123123" }}

También quiero crear el mismo jsonrequest usando retrofit como abajo

  { "params":{"email":"[email protected]","password":"ni1234","firstName":"Nilesh","lastName":"Aher"}} 

Me puedes dar un pedazo de código

  • Renovar 2 verifica la URL de la llamada
  • Los parámetros @Part sólo se pueden utilizar con la codificación multipart. (Parámetro # 8)
  • Cómo implementar un WebSocket con Retrofit + RX
  • Default Schedulers para rxjava en Android
  • Retrofit GSON serialize Fecha de json string en java.util.date
  • Rx java retrofit 2 manejo de errores
  • Deserialización GSON de una lista envuelta de objetos
  • Retrofit Cómo imprimir la respuesta JSON
  • Por qué Android Circle Progress Dialog Cómo se congela cuando un montón de datos Sincronización de servidor a DB local mediante Retrofit
  • Cómo saber cuándo finaliza una llamada de Retrofit
  • Retrofit 2: Obtener el cuerpo de JSON from Response
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.