Enlazando una lista en @RequestParam

Estoy enviando algunos parámetros de un formulario de esta manera:

myparam[0] : 'myValue1' myparam[1] : 'myValue2' myparam[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue' ... 

Sé que puedo obtener todos los parámetros en el método del controlador agregando un parámetro como

 public String controllerMethod(@RequestParam Map params){ .... } 

Quiero vincular los parámetros myParam [] (no los otros) a una lista o matriz (todo lo que mantiene el orden de los índices), así que lo he intentado con una syntax como:

 public String controllerMethod(@RequestParam(value="myParam") List myParams){ .... } 

y

 public String controllerMethod(@RequestParam(value="myParam") String[] myParams){ .... } 

pero ninguno de ellos vincula los myParams. Incluso cuando agrego un valor al mapa, no puedo vincular los parámetros:

 public String controllerMethod(@RequestParam(value="myParam") Map params){ .... } 

¿Hay alguna syntax para vincular algunos parámetros a una lista o matriz sin tener que crear un objeto como @ModelAttribute con un atributo de lista en él?

Gracias

Las matrices en @RequestParam se usan para enlazar varios parámetros del mismo nombre:

 myparam=myValue1&myparam=myValue2&myparam=myValue3 

Si necesita vincular parámetros indexados de @ModelAttribute@ModelAttribute , supongo que necesita @ModelAttribute todos modos.

O podrías hacerlo de esa manera:

 public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){ .... } 

Eso funciona, por ejemplo, para formularios como este:

   

Esta es la solución más simple 🙂

Simplemente complementando lo que dijo Donal Fellows, puede usar List con @RequestParam

 public String controllerMethod(@RequestParam(value="myParam") List myParam){ .... } 

¡Espero eso ayude!

Una forma de lograr esto (de manera hackosa) es crear una clase contenedora para la List . Me gusta esto:

 class ListWrapper { List myList; // getters and setters } 

Entonces su firma de método de controlador se vería así:

 public String controllerMethod(ListWrapper wrapper) { .... } 

No es necesario utilizar la anotación @RequestParam o @ModelAttribute si el nombre de la colección que pasa en la solicitud coincide con el nombre del campo de la colección de la clase contenedora, en mi ejemplo, los parámetros de su solicitud deberían tener este aspecto:

 myList[0] : 'myValue1' myList[1] : 'myValue2' myList[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue' 

Suscribiendo lo que basil dijo en un comentario a la pregunta en sí, si method = RequestMethod.GET puede usar @RequestParam List groupVal .

Entonces, llamar al servicio con la lista de parámetros es tan simple como:

 API_URL?groupVal=kkk,ccc,mmm 

Cambiar el valor del campo oculto con la checkbox alternar como a continuación …

HTML:

   Delete All 

Guión:

 function toggle(obj) {`var $input = $(obj); if ($input.prop('checked')) { $('#deleteAll').attr( 'value','Checked'); } else { $('#deleteAll').attr( 'value','Unchecked'); } }