W jaki sposób otrzymujesz parametr adresu URL z mapowaniem kontrolera sprężyny

102

Ten problem wydaje się trywialny, ale nie mogę sprawić, by działał poprawnie. Wywołuję mapowanie kontrolera Springa za pomocą jquery ajax. Wartość someAttr jest zawsze pustym ciągiem, niezależnie od wartości w adresie URL. Proszę, pomóż mi określić, dlaczego.

-URL wywołany

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

-Controller Mapping

@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".
}
koder
źródło

Odpowiedzi:

166

Powinieneś używać @RequestParamzamiast @ModelAttributenp

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

Możesz nawet @RequestParamcałkowicie pominąć, jeśli wybierzesz, a Spring założy, że to jest to:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}
skaffman
źródło
Na wypadek, gdyby ktoś inny szukał również oficjalnej dokumentacji @RequestParam, oto jest: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias
22

Masz wiele wariantów wykorzystania @RequestParamz dodatkowymi opcjonalnymi elementami, np

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

Jeśli nie wstawisz required = false- parametr będzie domyślnie wymagany.

defaultValue = "someValue" - wartość domyślna, która ma być używana jako rezerwowa, gdy parametr żądania nie został podany lub ma wartość pustą.

Jeśli parametr żądania i metody są takie same - nie potrzebujesz value = "someAttr"

Optio
źródło