Estoy enviando algunos parámetros desde 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<String, String> params){
....
}
Quiero vincular los parámetros myParam [] (no los otros) a una lista o matriz (cualquier cosa que mantenga el orden del índice), así que he intentado con una sintaxis como:
public String controllerMethod(@RequestParam(value="myParam") List<String> 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 puede vincular los parámetros:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
¿Existe alguna sintaxis para vincular algunos parámetros a una lista o matriz sin tener que crear un objeto como @ModelAttribute con un atributo de lista?
Gracias
HandlerMethodInvoker.resolveRequestParam
solo obtiene el primer valormethod = RequestMethod.GET
omethod = RequestMethod.POST
? Si se.GET
@RequestParam List<String> groupVal
cumple con?groupVal=kkk,ccc,mmm
éxito ( Spring Boot )Respuestas:
Las matrices en
@RequestParam
se utilizan para vincular varios parámetros del mismo nombre:Si necesita vincular
@ModelAttribute
parámetros indexados al estilo, supongo que lo necesita de@ModelAttribute
todos modos.fuente
O simplemente podría hacerlo de esa manera:
Eso funciona, por ejemplo, para formas como esta:
Esta es la solución más simple :)
fuente
List<String>
través de esto? También es posible obtener un frijol java comoList<MyBean>
Simplemente complementando lo que dijo Donal Fellows, puede usar List con @RequestParam
¡Espero eso ayude!
fuente
Suscribiendo lo que dijo albahaca en un comentario a la pregunta en sí, si
method = RequestMethod.GET
puede usarlo@RequestParam List<String> groupVal
.Entonces llamar al servicio con la lista de parámetros es tan simple como:
fuente
Una forma de lograr esto (de una manera hack) es crear una clase de contenedor para el
List
. Me gusta esto:Entonces la firma de su método de controlador se vería así:
No es necesario usar 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 wrapper, en mi ejemplo, los parámetros de su solicitud deberían verse así:fuente
No era obvio para mí que, aunque puede aceptar una Colección como parámetro de solicitud, pero en el lado del consumidor , todavía tiene que pasar los elementos de la colección como valores separados por comas .
Por ejemplo, si la API del lado del servidor se ve así:
Pasar directamente una colección al RestTemplate como RequestParam como se muestra a continuación provocará la corrupción de datos
En cambio, puedes usar
El ejemplo completo se puede encontrar aquí , espero que le ahorre a alguien el dolor de cabeza :)
fuente
Cambie el valor del campo oculto con la casilla de verificación como se muestra a continuación ...
HTML:
Guión:
fuente