119 votes

Comment recevoir un paramètre url avec le mapping d'un contrôleur Spring ?

Ce problème semble trivial, mais je n'arrive pas à le faire fonctionner correctement. J'appelle le mapping de mon contrôleur Spring avec jquery ajax. La valeur de someAttr est toujours une chaîne vide, quelle que soit la valeur de l'url. Veuillez m'aider à déterminer pourquoi.

-URL appelé

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6

-Mappage des contrôleurs

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET)
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
        @ModelAttribute(value="someAttr") String someAttr) {
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string.  The value for id is correctly set to "1".
}

181voto

skaffman Points 197885

Vous devriez utiliser @RequestParam au lieu de @ModelAttribute par exemple

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 @RequestParam String someAttr) {
}

Vous pouvez même omettre @RequestParam ensemble si vous le souhaitez, et Spring supposera qu'il s'agit bien de cela :

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}

26voto

Optio Points 2703

Vous avez beaucoup de variantes pour utiliser @RequestParam avec des éléments supplémentaires facultatifs, par exemple

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr

Si vous ne mettez pas required = false - sera requis par défaut.

defaultValue = "someValue" - la valeur par défaut à utiliser comme solution de repli lorsque le paramètre de la demande n'est pas fourni ou a une valeur vide.

Si les paramètres de la demande et de la méthode sont les mêmes, vous n'avez pas besoin de value = "someAttr"

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