started restful mvc library getting framework ecosystem context android spring post spring-mvc

android - restful - spring library



RecepciĆ³n de solicitud POST en el servidor(Spring Framework) desde la aplicaciĆ³n Android (3)

Estoy enviando una solicitud POST a un servidor desde mi aplicación Android. El servidor se desarrolla utilizando Spring Framework. El servidor recibe la solicitud pero el parámetro que estaba enviando es nulo / vacío (se muestra en el registro).

El código utilizado para enviar la solicitud POST es:

DefaultHttpClient hc=new DefaultHttpClient(); ResponseHandler <String> res=new BasicResponseHandler(); String postMessage = "json String"; HttpPost postMethod=new HttpPost("http://ip:port/event/eventlogs/logs"); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("json", postMessage)); postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs)); hc.execute(postMethod,res);

También he intentado configurar HttpParams de la siguiente manera, pero también ha fallado:

HttpParams params = new BasicHttpParams(); params.setParameter("json", postMessage); postMethod.setParams(params);

El código del lado del Servidor que recibió esta solicitud es:

@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST) public String logs(@ModelAttribute("json") String json) { logger.debug("Received POST request:" + json); return null; }

El mensaje de Logger que estoy registrando muestra:

Received POST request:

¿Alguna idea de lo que me falta aquí?


Quizás Spring no está convirtiendo su cuerpo POST en un Model . Si ese es el caso, no sabrá cuál es el atributo json en su Model porque no hay Model !

Eche un vistazo a la Documentación de primavera sobre el mapeo del cuerpo de la solicitud .

Debería poder usar las implementaciones de Springs MessageConverter para hacer lo que quiera. Específicamente, eche un vistazo al FormHttpMessageConverter , que convierte datos de formulario a / de un MultiValueMap<String, String> .

@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST) public String logs(@RequestBody Map<String,String> body) { logger.debug("Received POST request:" + body.get("json")); return null; }

Agregar esta línea a su configuración xml debe habilitar FormHttpMessageConverter de forma predeterminada:

<mvc:annotation-driven/>


He usado la Anotación RequestParam y me funciona. Ahora el código en el servidor es el siguiente:

@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST) public String logs(@RequestParam("json") String json) { logger.debug("Received POST request:" + json); return null; }


Creo que necesitas agregar un encabezado de tipo de contenido del cliente. El MessageConverter para JSON se registra con un par de tipo de contenido que aceptará, uno es application / json.

Si envía con un tipo de contenido no manejado por ningún MessageConvert, no funcionará.

Intente agregar "Content-type: application / json" como encabezado.