48 votes

Spring MVC peut-il gérer les paramètres de requête à valeurs multiples ?

Ayant cette http://myserver/find-by-phones?phone=123&phone=345 est-il possible de traiter cette demande avec quelque chose comme ceci :

@Controller
public class Controller{
    @RequestMapping("/find-by-phones")
    public String find(List<String> phones){
       ...
    }
}

Spring MVC peut-il, d'une manière ou d'une autre, convertir des paramètres à valeurs multiples en paramètres de sécurité ? phones à une liste de String (ou d'autres objets ?

Gracias.

Alex

84voto

fmucar Points 6937

"Arrays" dans @RequestParam sont utilisés pour lier plusieurs paramètres du même nom :

phone=val1&phone=val2&phone=val3

-

public String method(@RequestParam(value="phone") String[] phoneArray){
    ....
}

Vous pouvez ensuite le convertir en une liste en utilisant Arrays.asList(..) méthode

EDIT1 :

Comme suggéré par emdadul, la dernière version de spring peut aussi faire comme ci-dessous :

public String method(@RequestParam(value="phone", required=false) List<String> phones){
    ....
}

10voto

Marquis Blount Points 2603

Spring peut convertir le paramètre de la requête directement en un fichier List ou même un Set

par exemple :

 @RequestParam(value = "phone", required = false) List<String> phones

ou

 @RequestParam(value = "phone", required = false) Set<String> phones

2voto

mlecar Points 311

J'ai eu un problème avec les chaînes de requête indexées comme

http://myserver/find-by-phones?phone[0]=123&phone[1]=345

et uniquement la manipulation avec

MultiValueMap<String, String>

a fonctionné pour moi. Ni List ni String[] ne le géraient correctement.

J'ai aussi essayé

@RequestParam("phones[]")

pero Résolveur de requête de méthode d'argumentation cherche explicitement phones[] en ignorant les index. C'est pourquoi j'ai décidé de laisser Solveur de requêtes de type " RequestParamMapMethodArgumentResolver " le gérer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X