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.