Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo puedo enviar JSon como BODY en una solicitud POST al servidor desde una aplicación de Android?

Estoy trabajando en mi primera aplicación de Android. Ahora quiero hacer es hacer una solicitud POST a un servicio restfull que se ejecuta en el servidor y quiero que el CUERPO de esta solicitud sea una cadena JSon.

Estoy utilizando GSon para generar el JSon para enviar al servidor. El código que estoy usando para hacer la solicitud POST sigue:

  • Tutorial NFC para Android que no sea API demo
  • Android: Fragmentos: alternativa a setContentView
  • Tomar captura de pantalla de la pantalla actual del dispositivo
  • React-Native: Module AppRegistry no es un módulo llamable registrado
  • SetCurrentItem en ViewPager no se desplaza inmediatamente en la posición correcta
  • Cómo evitar reiniciar la actividad cuando cambia la orientación en Android
  • HttpPost requisicao = new HttpPost(); requisicao.setURI(new URI(uri)); requisicao.setHeader("User-Agent", sUserAgent); requisicao.setHeader("Content-type", "application/json"); HttpResponse resposta = null; //I can see the json correctly print on log with the following entry. Log.d(TAG, "JSon String to send as body in this request ==>> " + jsonString); //than I try to send JSon using setEntityMethod StringEntity sEntity = new StringEntity(jsonString, "UTF-8"); requisicao.setEntity(sEntity); resposta = httpClient.execute(requisicao); resultado = HttpProxy.leRespostaServidor(resposta); 

    El código de respuesta es 400 BAD REQUEST y desde el registro del servidor puedo leer la información. Donde dice que el cuerpo no fue enviado correctamente:

     13:48:22,524 ERROR [SynchronousDispatcher] Failed executing POST /peso/cadastrar/maia.marcos@gmail.com org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class java.io.Reader of content type: application/json 

    El código para el lado del servidor es un simple servicio de reposición de costura:

      @POST @Path("/cadastrar/{userEmail}") @Consumes(MediaType.APPLICATION_JSON) public String cadastraPeso(@PathParam("userEmail") String email, Reader jsonString) { LineNumberReader lnr = new LineNumberReader(jsonString); try { String json = lnr.readLine(); if(json != null) { log.debug("String json recebida do device ==>> " + json); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "OK - o e-mail processado foi ==>> " + email; } 

    ¿Qué podría estar mal con el código de cliente de Android? He investigado la web y no he encontrado ninguna información realmente útil sobre este tema.

    S

  • Diferencia entre el relleno y el margen de una vista
  • Superposición de contenido por encima de AppBarLayout utilizando nuevo diseño de material
  • Cómo alinear el título en el centro de ActionBar en el tema predeterminado (Theme.Holo.Light)
  • Barra de acción El botón Atrás no funciona
  • ¿Cómo puedo diseñar un conmutador Android?
  • Prueba de Snackbar con Espresso
  • One Solution collect form web for “¿Cómo puedo enviar JSon como BODY en una solicitud POST al servidor desde una aplicación de Android?”

    Lo siento gente, acaba de resultar que el error fue en el servicio de descanso. Lo he cambiado para recibir un String en lugar del objeto Reader y ahora funciona como se esperaba, el código Rest en el lado del servidor ahora es:

      @POST @Path("/cadastrar/{userEmail}") @Consumes(MediaType.APPLICATION_JSON) public String cadastraPeso(@PathParam("userEmail") String email, String jsonString) { String json = jsonString; if(json != null) { log.debug("String json recebida do device ==>> " + json); } return "OK - o e-mail processado foi ==>> " + email; } 

    Y la cadena JSon se recibe correctamente en el lado del servidor.

    Así que el código de Android por encima de su funcionamiento como se esperaba.

    Saludos.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.