web-dev-qa-db-fra.com

comment capturer plusieurs paramètres en utilisant @RequestParam en utilisant spring mvc?

Supposons qu'un hyperlien est cliqué et qu'une URL est générée avec la liste de paramètres suivante myparam=myValue1&myparam=myValue2&myparam=myValue3. Maintenant, comment puis-je capturer tous les paramètres en utilisant @RequestParam au printemps MVC?

Mon exigence est que je dois capturer tous les paramètres et les mettre sur une carte.

S'il vous plaît aider!

35
Shivayan Mukherjee
@RequestMapping(value = "users/newuser", method = RequestMethod.POST)   
public String saveUser(@RequestParam Map<String,String> requestParams) throws Exception{
   String userName=requestParams.get("email");
   String password=requestParams.get("password");

   //perform DB operations

   return "profile";
}

Vous pouvez utiliser RequestParam de la manière mentionnée ci-dessus.

39
Touchstone

Il semble que vous ne pouvez pas obtenir

Map<String,String>

parce que tous vos params ont le même nom "myparam"

Essayez ceci à la place:

public ModelAndView method(@RequestParam("myparam") List<String> params) { }
23
Vitaly Velikodny

Pour obtenir tous les paramètres à la fois, essayez ceci:

public ModelAndView postResultPage(@RequestParam MultiValueMap<String, String> params)

Cette fonctionnalité est décrite dans le @RequestParam Java doc (3. Paragraphe):

Annotation indiquant qu'un paramètre de méthode doit être lié à un paramètre de requête Web. Pris en charge pour les méthodes de gestionnaire annotées dans les environnements Servlet et Portlet.

Si le type de paramètre de la méthode est Map et qu'un nom de paramètre de requête est spécifié, la valeur du paramètre de requête est convertie en Map en supposant qu'une stratégie de conversion appropriée est disponible.

Si le paramètre de la méthode est Map<String, String> ou MultiValueMap<String, String> et si aucun nom de paramètre n’est spécifié, le paramètre map est rempli avec tous les noms et toutes les valeurs de paramètre de requête.

12
Ralph

A partir du printemps 3.0, vous pouvez également utiliser MultiValueMap pour y parvenir:

Un exemple rudimentaire serait:

public String someMethod(@RequestParam MultiValueMap<String,String> params) {

    final Iterator<Entry<String, List<String>>> it = params.entrySet().iterator();

    while(it.hasNext()) {
        final String k = it.next().getKey();
        final List<String> values = it.next().getValue();
    }

    return "dummy_response";

}
6
Brian

Spring MVC peut soutenir List<Object>, Set<Object> et Map<Object> param, mais sans @RequestParam.

Prenez List<Object> _ comme exemple, si votre objet est User.Java, et c'est comme ça:

public class User {
    private String name;
    private int age;

    // getter and setter
}

Et vous voulez passer un param de List<User>, vous pouvez utiliser l'URL comme ceci

http://127.0.0.1:8080/list?users[0].name=Alice&users[0].age=26&users[1].name=Bob&users[1].age=16

N'oubliez pas de coder l'URL, l'URL après encodé est comme ceci:

http://127.0.0.1:8080/list?users%5B0%5D.name=Alice&users%5B0%5D.age=26&users%5B1%5D.name=Bob&users%5B1%5D.age=16

Exemple de List<Object>, Set<Object> et Map<Object> est affiché dans mon github .

0
Frank.Chang

Si quelqu'un essaie de faire la même chose dans Spring Boot, utilisez RequestBody à la place de RequestParam.

0
Akki