Wie erhalten Sie einen URL-Parameter mit einem Federregler-Mapping?

96

Dieses Problem scheint trivial zu sein, aber ich kann es nicht richtig zum Laufen bringen. Ich rufe mein Spring-Controller-Mapping mit jquery ajax auf. Der Wert für someAttr ist immer eine leere Zeichenfolge, unabhängig vom Wert in der URL. Bitte helfen Sie mir herauszufinden, warum.

-URL hat angerufen

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

-Controller-Zuordnung

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

Antworten:

157

Sie sollten @RequestParamanstelle von @ModelAttributez

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

Sie können sogar @RequestParamganz weglassen, wenn Sie möchten, und Spring geht davon aus, dass es das ist:

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

Sie haben viele Varianten zur Verwendung @RequestParammit zusätzlichen optionalen Elementen, z

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

Wenn Sie nicht setzen, ist required = falsestandardmäßig param erforderlich.

defaultValue = "someValue" - Der Standardwert, der als Fallback verwendet wird, wenn der Anforderungsparameter nicht angegeben wird oder einen leeren Wert hat.

Wenn Anfrage und Methodenparameter identisch sind, brauchen Sie das nicht value = "someAttr"

Optio
quelle