J'envoie quelques paramètres à partir d'un formulaire de cette manière:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Je sais que je peux obtenir tous les paramètres de la méthode du contrôleur en ajoutant un paramètre comme
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Je veux lier les paramètres myParam [] (pas les autres) à une liste ou un tableau (tout ce qui garde l'ordre d'index), j'ai donc essayé avec une syntaxe comme:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
et
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
mais aucun d'entre eux ne lie les myParams. Même lorsque j'ajoute une valeur à la carte, il n'est pas possible de lier les paramètres:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Existe-t-il une syntaxe pour lier certains paramètres à une liste ou à un tableau sans avoir à créer un objet en tant que @ModelAttribute avec un attribut de liste?
Merci
HandlerMethodInvoker.resolveRequestParam
n'obtient que la première valeurmethod = RequestMethod.GET
oumethod = RequestMethod.POST
? Si.GET
@RequestParam List<String> groupVal
rempli avec?groupVal=kkk,ccc,mmm
succès ( Spring Boot )Réponses:
Les tableaux dans
@RequestParam
sont utilisés pour lier plusieurs paramètres du même nom:Si vous avez besoin de lier
@ModelAttribute
des paramètres indexés de style, je suppose que vous en avez besoin de@ModelAttribute
toute façon.la source
Ou vous pouvez simplement le faire de cette façon:
Cela fonctionne par exemple pour des formulaires comme celui-ci:
C'est la solution la plus simple :)
la source
List<String>
grâce à cela. Il est également possible d'obtenir un java bean commeList<MyBean>
En complément de ce que Donal Fellows a dit, vous pouvez utiliser List avec @RequestParam
J'espère que ça aide!
la source
Abonnez-vous à ce que Basil a dit dans un commentaire à la question elle-même, si
method = RequestMethod.GET
vous pouvez l'utiliser@RequestParam List<String> groupVal
.Ensuite, appeler le service avec la liste des paramètres est aussi simple que:
la source
Une façon d'accomplir cela (de manière hackish) est de créer une classe wrapper pour le
List
. Comme ça:Ensuite, la signature de votre méthode de contrôleur ressemblerait à ceci:
Pas besoin d'utiliser l' annotation
@RequestParam
ou@ModelAttribute
si le nom de collection que vous passez dans la requête correspond au nom du champ de collection de la classe wrapper, dans mon exemple, vos paramètres de requête devraient ressembler à ceci:la source
Il n'était pas évident pour moi que bien que vous puissiez accepter une collection en tant que paramètre de demande, mais du côté du consommateur, vous devez toujours transmettre les éléments de la collection sous forme de valeurs séparées par des virgules .
Par exemple, si l'API côté serveur ressemble à ceci:
Passer directement une collection au RestTemplate en tant que RequestParam comme ci-dessous entraînera une corruption des données
Au lieu de cela, vous pouvez utiliser
L'exemple complet peut être trouvé ici , j'espère que cela évitera à quelqu'un le mal de tête :)
la source
Modifiez la valeur du champ masqué avec la case à cocher comme ci-dessous ...
HTML:
Scénario:
la source