web-dev-qa-db-fra.com

Spring MVC peupler la mappe @RequestParam <String, String>

J'ai la méthode suivante dans mon Spring MVC @Controller:

@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam(value="test") Map<String, String> test) {   
    (...)
}

Je l'appelle comme ça:

http://myUrl?test[A]=ABC&test[B]=DEF

Cependant, la variable "test" RequestParam est toujours nulle

Que dois-je faire pour renseigner la variable "test"?

4

Comme détaillé ici https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

Si le paramètre de la méthode est Map ou MultiValueMap et qu'aucun nom de paramètre n'est spécifié, le paramètre map est renseigné avec tous les noms et valeurs de paramètres de requête.

Donc, vous changeriez votre définition comme ceci.

@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam Map<String, String> parameters) 
{   
  (...)
}

Et dans vos paramètres si vous avez appelé l'URL http: // myUrl? A = ABC & B = DEF

Vous auriez dans votre méthode

parameters.get("A");
parameters.get("B");
2
zatopek

Spring n'a pas de stratégie de conversion par défaut à partir de plusieurs paramètres portant le même nom en HashMap. Il peut cependant les convertir facilement en liste, tableau ou ensemble.

@RequestMapping(value = "/testset", method = RequestMethod.GET)
    public String testSet(@RequestParam(value = "test") Set<String> test) {

        return "success";
    }

J'ai testé avec le facteur comme http://localhost:8080/mappings/testset?test=ABC&test=DEF

Vous verrez le jeu ayant des données, [ABC, DEF]

2
Amit K Bist

Vous pouvez créer une nouvelle classe contenant la carte devant être renseignée par Spring, puis utiliser cette classe en tant que paramètre de votre méthode annotée @RequestMapping.

Dans votre exemple, créez une nouvelle classe

public static class Form {
   private Map<String, String> test;
   // getters and setters
}

Ensuite, vous pouvez utiliser Form comme paramètre dans votre méthode.

@RequestMapping(method = RequestMethod.GET)
public String testUrl(Form form) {
  // use values from form.getTest()
}
0
user2456718