Solicitud POST con Retrofit dando 500
Tengo el cuerpo siguiente enviado a través del regreso del cartero apenas muy bien (como JSON crudo)
{"payload":{"email":"","username":"","password":""}}
- Tipo de entrada = número no es posible insertar números negativos en el teléfono móvil
- Cómo obtener el código de autorización de Google una sola vez
- Creación de aplicaciones para iphone y Android para aplicaciones de rails existentes
- No se pueden enviar datos de JSON desde Android al servidor ROR
- Publicar en Ruby on Rails la aplicación de android
Sin embargo, cuando intento enviarlo mediante Retrofit de la siguiente manera, no funciona (da 500):
public Observable<JsonObject> signup(String email, String userName, String password) { JsonObject data = new JsonObject(); JsonObject payload = new JsonObject(); data.addProperty("email", email); data.addProperty("username", userName); data.addProperty("password", password); payload.add("payload", data); return mShoutApiService.signup(payload); }
La llamada de servicio y el adaptador son los siguientes
Servicio:
@POST("/signup") Observable<JsonObject> signup(@Body JsonObject payload);
adaptador:
private RestAdapter createRestAdapter(String hostUrl, GsonConverter gsonConverter, OkClient okClient) { return new RestAdapter.Builder() .setClient(okClient) .setConverter(gsonConverter) .setEndpoint(hostUrl) .setLogLevel(LogLevel.FULL) .setLog(new AndroidLog("SHOUT_LOG")) .build(); } private GsonConverter getGsonConverter(Gson gson) { return new GsonConverter(gson); } private OkClient getOkClient() { OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setReadTimeout(READ_TIMEOUT, TimeUnit.SECONDS); okHttpClient.setConnectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS); return new OkClient(okHttpClient); }
Los registros muestran lo siguiente
03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: ---> HTTP POST http://shout-api.herokuapp.com/signup 03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: Content-Type: application/json; charset=UTF-8 03-23 05:04:00.380 2442-3468/shout.surge.com.shout D/SHOUT_LOG: Content-Length: 52 03-23 05:04:00.384 2442-3468/shout.surge.com.shout D/SHOUT_LOG: {"payload":{"email":"","username":"","password":""}} 03-23 05:04:00.384 2442-3468/shout.surge.com.shout D/SHOUT_LOG: ---> END HTTP (52-byte body) 03-23 05:04:09.180 2442-3468/shout.surge.com.shout D/SHOUT_LOG: <--- HTTP 500 http://shout-api.herokuapp.com/signup (8796ms)
Parece que son la misma llamada exacta pero por alguna razón falla en mi aplicación móvil. Cualquier idea de lo que estoy perdiendo sería genial!
- Dispositivo de Android de acceso de host local en la computadora portátil
- ¿Qué método de autenticación debo usar con la gema Sorcery usando una aplicación móvil?
- ActionController InvalidAuthenticityToken en Api :: V1 :: UsersController # create
- Convierta la aplicación Ruby on Rails en la aplicación Android PhoneGap nativa
- Cómo Firebase Auth con Rails?
- Iniciar el entorno de desarrollo de rails en android
- Mover la aplicación web existente en una aplicación de teléfono nativa mediante un contenedor de navegador
- ¿Cómo puedo verificar la facturación de Android en la aplicación con un servidor con Ruby?
He echado un vistazo a su problema y como sospecho que de hecho está relacionado con una pequeña diferencia en las llamadas realizadas en la aplicación con las llamadas realizadas por el cartero. Desafortunadamente no puedo explicar por qué esto sucede porque ser un 500 es más probable que una implementación defectuosa en el lado del servidor.
El problema se resolvió para mí cuando he añadido el encabezado Accept: application/json
como así:
@Headers("Accept: application/json") @POST("/signup") Observable<JsonObject> signup(@Body JsonObject payload);
He notado que la herramienta que estoy usando ( Advanced REST Client para cromo ) agregaba dicho encabezado a cada llamada.
Cuando quito esta cabecera consigo los 500 que usted experimentaba. También puede utilizar Accept: */*
, pero no estoy seguro de que esto sea una buena práctica.
Siento no tener suficiente para decirte por qué sucede esto, pero arregló el problema para mí. Lo probé en una aplicación para Android.
- ¿Cuál es el significado exacto de la versión de la plataforma Android NDK en comparación con el nivel API?
- Comportamiento parecido a un buscador en RecyclerView