Pase y reciba el objeto JSON de Jersey Resftul webservice desde android

Escenario: pase el nombre de usuario y la contraseña en un objeto json a un servicio web reparador y obtenga un objeto json a cambio. Sí, lo sé, es simple, pero no puedo conseguir que funcione.

He estado tratando de esto desde varios días. Hasta ahora, he intentado esto:

Mi código de servicio web

@POST @Path("/testJson") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public JSONObject testJson(JSONObject inputJsonObj) throws Exception { JSONObject myjson = new JSONObject(); if(inputJsonObj != null){ System.out.println("================================="); System.out.println("JSON object = " + inputJsonObj.toString()); System.out.println("================================="); } else{ System.out.println("JSON is NULL"); } myjson.put("success", "1"); System.out.println(myjson.toString()); // return "string returned"; return myjson; } 

Y dentro de mi acivity android, el código es

 // POST request to <service>/SaveVehicle HttpPost request = new HttpPost(myURL); request.setHeader("Accept", "application/json"); request.setHeader("Content-type", "application/json"); request.setHeader("user-agent", "Yoda"); try { // Build JSON string // JSONStringer vehicle = new JSONStringer().object() // .key("getItInputTO").object().key("zipCode").value("90505") // .key("financingOption").value("B").key("make") // .value("Scion").key("baseAmountFinanced").value("12000") // .key("modelYear").value("2010").key("trimCode") // .value("6221").key("totalMSRP").value("15000") // .key("aprRate").value("").endObject().endObject(); JSONObject myjson = new JSONObject(); myjson.put("1", "first"); myjson.put("2", "second"); StringEntity entity = new StringEntity(myjson.toString()); entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json; charset=utf-8")); request.setEntity(entity); // Send request to WCF service DefaultHttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); // HttpResponse response = httpClient.execute(request, localContext); HttpResponse response = httpClient.execute(request); resCode = response.getStatusLine().getStatusCode(); Toast.makeText(getApplicationContext(), response.getStatusLine().getStatusCode() + "", Toast.LENGTH_LONG).show(); if (resCode == 200) { Toast.makeText(getApplicationContext(), response.getStatusLine().getStatusCode() + "", Toast.LENGTH_LONG).show(); HttpEntity entity2 = (HttpEntity) response.getEntity().getContent(); String text = getASCIIContentFromEntity(entity); if(text!=null){ JSONObject obj = new JSONObject(text); lblMsg.setText("Successful!"); } // BufferedReader in = new BufferedReader(new // InputStreamReader(response.getEntity().getContent())); // // // String line = ""; // StringBuffer returnFromServer = new StringBuffer(); // // while ((line = in.readLine()) != null) { // returnFromServer.append(line); // } // // Toast what we got from server // Toast.makeText(getApplicationContext(), // returnFromServer.toString(), Toast.LENGTH_LONG).show(); // // if (entity != null) { // entity.consumeContent(); // } } } catch (Exception e) { // TODO: handle exception } 

Las secciones comentadas muestran los intentos anteriores.

Salida que obtengo en la consola del servidor

 ================================= JSON object = {} ================================= {"success":"1"} 

Mi servidor del lado del receptor json objeto no se está poblando no sé por qué.

Nota:

  1. Tengo INTERNET y muchos otros permisos en mi manifiesto android.
  2. Mi webservice está en funcionamiento.
  3. Tengo todos los jarros requeridos es decir jersey, json etc
  4. Estoy utilizando Tomcat 7 para el servicio de red de descanso

Apreciaría altamente cualquier ayuda. Gracias

Tengo el mismo problema que el suyo. No sé por qué, pero la solución temporal que estoy usando es crear una clase para manejar esos parámetros.

Eso significa usar Jackson para convertir Json Object <=> "Your Class"

Vea este tutorial para más información: http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

===================================

Y acabo de encontrar este tema, puede ser más útil que la solución superior: Jersey POST método está recibiendo valores nulos como parámetros

Tal vez, es tan tarde para responder, pero aquí está:

  • Cambiar primero POST a GET
  • Modifica tu @Path
  • Y agrega el @PathParam a tu código

Cambios parece:

 @GET @Path("/testJson/{inputJsonObj}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public JSONObject testJson(@PathParam("inputJsonObj") JSONObject inputJsonObj) throws Exception { ... 

Sí, tiene que especificar cuándo su recurso acepta un parámetro.

También tenga en cuenta, tan pronto como se cambia el método de solicitud, es necesario modificar la forma android: inteast de HttpPost uso HttpGet

  • Cliente Android para servicio web REST con seguridad básica
  • Ksoap2 casting getResponse ()
  • No se pueden serializar las fechas con ksoap2
  • ¿Qué authTokenType significa exactamente?
  • Cómo implementar aplicación de chat para Android?
  • Aplicación de Android CursorWindow error de memoria
  • Conectando MySql con Android sin usar PHP
  • ¿La mejor práctica para implementar retroalimentación de retorno a la actividad recreada?
  • Cómo utilizar parámetros con HttpPost
  • Cómo crear una notificación push personalizada usando asp.net webservice?
  • Necesidad de transferir el archivo .apk mediante webservice
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.