requestparam requestmapping pathvariable mvc how spring-mvc

requestmapping - Cómo pasar el parámetro post array en Spring MVC



spring mvc @requestmapping (5)

Me preguntaba cómo pasar los parámetros de publicación, como seguir a las opciones html de exercept, normalmente obtendría una matriz en lenguaje como php ( POST[''param''][0]... funcionaría, creo)

url?param=value1&param=value2&param=value3

Lo intenté:

@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(String[] param)

Pero esto no funciona por alguna razón ...

¡Cualquier idea sería muy apreciada!


Esto debería funcionar:

@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(@RequestParam("param") String[] param)


Puedes usar esto:

@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(@RequestParam(value = "param[]") String[] paramValues){...}

recuperará todos los valores (dentro de la matriz paramValues ) del parámetro param (tenga en cuenta el value del atributo de RequestParam : finaliza con [] )


Si alguien todavía está luchando con eso, así es como debería hacerse:

Entradas de formulario:

<input name="myParam" value="1"/> <input name="myParam" value="4"/> <input name="myParam" value="19"/>

Método del controlador:

@RequestMapping public String deletePlaces(@RequestParam("myParam") Long[] myParams) { //myParams will have 3 elements with values 1,4 and 19 }

Esto funciona igual para String[] Integer[] Long[] y probablemente más. POST , GET , DELETE funcionará de la misma manera.

El nombre del parámetro debe coincidir con la etiqueta del name de la entrada del formulario. No se necesita [] adicional [] etc. De hecho, se puede omitir el nombre del parámetro, si el nombre del argumento del método es el mismo que el nombre de la entrada para que podamos terminar con la firma del método de esta manera:

@RequestMapping public String deletePlaces(@RequestParam Long[] myParams)

y todavía funcionará

Algo extra: ahora si tiene un modelo de dominio, digamos Place y tiene PlaceRepository , al proporcionar Place#id como valor de sus entradas, Spring puede buscar objetos relacionados para nosotros. Entonces, si asumimos que las entradas de formularios anteriores contienen ID de usuario como valores, entonces podemos simplemente escribir esto en el controlador:

public String deletePlaces(@RequestParam Place[] places) { //places will be populated with related entries from database! }

Dulce ¿no?


Si conoce su nombre de param, intente

@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(@RequestParam("myParam") String param)

Otra forma es usar el objeto de solicitud actual:

@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(HttpServletRequest request) { Map parameterMap = request.getParameterMap(); ... }


@RequestMapping(value="/schedule", method = RequestMethod.POST) public void action(@RequestParam(value = "param[]") String[] paramValues {...}

Esto funcionará cuando envíes, por ejemplo, ajax por jQuery:

$.ajax({ type: "POST", data: { param:paramValues } ... });

pero cuando envía solo una matriz de elementos con String, que contiene comas como "foo, baa", Spring dividirá esta cadena y creará una matriz con 2 elementos "foo" y "baa". Así que tenga cuidado con las comas cuando su matriz también puede tener un elemento.