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"?
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");
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]
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()
}