Comment recevez-vous un paramètre d'URL avec un mappage de contrôleur de ressort


98

Ce problème semble trivial, mais je n'arrive pas à le faire fonctionner correctement. J'appelle mon mappage de contrôleur Spring avec jquery ajax. La valeur de someAttr est toujours une chaîne vide quelle que soit la valeur dans l'url. S'il vous plaît, aidez-moi à déterminer pourquoi.

-URL appelé

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

-Cartographie du contrôleur

@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".
}

Réponses:


159

Vous devriez utiliser @RequestParamau lieu de @ModelAttribute, par exemple

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

Vous pouvez même omettre @RequestParamcomplètement si vous choisissez, et Spring supposera que c'est ce que c'est:

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

Au cas où quelqu'un d'autre chercherait également la documentation officielle @RequestParam, la voici: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias il y a

22

Vous disposez de nombreuses variantes à utiliser @RequestParamavec des éléments optionnels supplémentaires, par ex.

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

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

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

Si les paramètres de requête et de méthode sont identiques, vous n'avez pas besoin value = "someAttr"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.