Cómo enviar datos JSON como parámetro de Android a Jersey RESTful Service

Estoy creando una función de inicio de sesión para mi aplicación de Android que se conectará a un servicio web Jersey RESTful. Como parte de la llamada de servicio estaré enviando un objeto JSON, pero mi problema ahora es que no sé cómo descifrar el JSON en el lado del servicio web. Aquí está mi código:

Android (AsyncTask – doInBackground):

try { HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost( "http://XXXX:8080/HearIt/services/AuthMySQL"); post.setHeader("content-type", "application/json"); JSONObject dato = new JSONObject(); dato.put("email", params[0]); dato.put("password", Object_Cipher.init(params[1])); StringEntity entity = new StringEntity(dato.toString()); post.setEntity(entity); HttpResponse resp = httpClient.execute(post); return EntityUtils.toString(resp.getEntity()); } catch (Exception E) { E.printStackTrace(); } 

Servicio web:

 @POST @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) public String AuthMySQL("WHAT I NEED PUT HERE") { return "none"; } 

¿Qué debo hacer para poder obtener los datos de JSON? Gracias.

Yo recomendaría leer las entidades de solicitud y respuesta en JAX-RS. También debe leer la Sección 3.3 de la especificación JAX-RS , ya que cubre los aspectos (muy) técnicos de cómo se manejan los parámetros en JAX-RS. En el más simple, usted podría proporcionar simplemente un parámetro de la cadena a su método del recurso y los datos entrantes (JSON) serían almacenados en él:

 @POST @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) public String AuthMySQL(String json) { System.out.println("The JAX-RS runtime automatically stored my JSON request data: " + json); } 

Por supuesto, esto no aprovecha el mapeo automatizado que JAX-RS puede proporcionar. Cuando se configura correctamente, el tiempo de ejecución puede deserializar los datos entrantes directamente en una clase Java (suponiendo que haya creado uno). Así, por ejemplo, dada la siguiente clase:

 class LoginData { private String email; private String password; // constructors, getters/setters } 

Puede optar por recopilar los datos de solicitud directamente en él como tal:

 @POST @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) public String AuthMySQL(LoginData data) { System.out.println("The JAX-RS runtime automatically deserialized my JSON request data: " + data); } 

Para lograrlo con éxito, deberá incluir el módulo jersey-json en su aplicación.

Trataré de hacer un ejemplo genérico para que lo sigas.

Digamos que usted quiere consumir el siguiente JSON:

 { "user": { "name": "john", "age": 20, "country": "austria" } } 

Tendrías que crear la siguiente clase:

 class User { String name; Integer age; String country; // getters, setters, whatevers } 

Y en el servicio web:

 @POST @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) public String consumeUserName(User user) { return user.getName(); } 
  • Cómo pasar el valor al parámetro enum de la bandera en el servicio Soap (servicio ASMX) Desde la aplicación android
  • Diferencia entre SOAP y KSOAP
  • Generar dirección desde Lat / Long en Android o REST
  • Llamar al servicio web desde el dispositivo Android
  • SocketTimeoutException mientras se conecta a la base de datos local
  • ASIHTTPRequest equivalente para Android o cualquier gestor / envoltorio de solicitud HTTP?
  • ¿Cómo enviar una solicitud POST utilizando volley con cuerpo de cuerda?
  • ¿Cómo puedo hacer que una aplicación de Android se comunique con un servidor web a través de Internet?
  • Cómo resolver org.apache.http.conn.ConnectTimeoutException en Android?
  • Cómo llamar a un servicio web local desde una aplicación móvil de Android
  • Cómo llamar a un servicio web usando phonegap para android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.