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
.
- ¿Cómo puedo obtener Robospice para tratar cualquier cosa que no sea una respuesta 200 de Retrofit & OKHttp como un error
- NetworkOnMainThreadException con retrofit-beta2 y rxjava
- Android rxJava Manejo de errores con retroadaptación
- Renovación de la referencia $ ref de objeto deserializante de JSON a su copia original
- Retrofit ETAG y almacenamiento en caché
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"} }
- RxJava se vuelve a suscribir al evento tras la restauración de la actividad
- ¿Hay un reemplazo para el RequestInterceptor en Retrofit 2?
- ¿Cómo puedo utilizar Retrofit para POST un complejo JSON parámetro
- Añadir Retrofit Requestinterceptor con Dagger en tiempo de ejecución
- Cookie de sesión no es persistente en Retrofit Android
- ¿Cómo puede Retrofit 2.0 analizar objeto JSON anidado?
- Patrón de repositorio con SqlBrite / SqlDelight (base de datos sin conexión) y Retrofit (solicitud Http)
- Retrofit y SimpleXML para el elemento raíz desconocido?
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