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:

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

  • Esquema de URL personalizado de Android se niega a trabajar / Cómo navegar de nuevo a Android App después de OAuth
  • Android ContentProvider y Google IO Rest Talk
  • Mejor Recurso de Aprendizaje para OAuth
  • Marco del servidor REST para Android
  • Spring MVC, Thymeleaf y REST
  • Desarrollo de aplicaciones cliente de Android REST
  • "Http: // {root_dir} / oauth / token" Archivo no encontrado en Magento para registrar la aplicación REST API
  • Android con Gradle (Java terminado con valor de salida no nulo 2)
  • 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.