Come si riceve un parametro URL con una mappatura del controller a molla


98

Questo problema sembra banale, ma non riesco a farlo funzionare correttamente. Sto chiamando la mia mappatura del controller Spring con jquery ajax. Il valore per someAttr è sempre una stringa vuota indipendentemente dal valore nell'URL. Per favore aiutami a determinare il motivo.

-URL chiamato

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

Risposte:


159

Dovresti usare @RequestParaminvece di @ModelAttribute, ad es

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

Puoi persino omettere del @RequestParamtutto se lo desideri e Spring presumerà che sia quello che è:

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

Nel caso in cui qualcun altro stia anche cercando la documentazione ufficiale @RequestParam, eccola: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias

22

Hai molte varianti da utilizzare @RequestParamcon elementi opzionali aggiuntivi, ad es

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

Se non metti required = false- param sarà richiesto per impostazione predefinita.

defaultValue = "someValue" - il valore predefinito da utilizzare come fallback quando il parametro di richiesta non è fornito o ha un valore vuoto.

Se la richiesta e il parametro del metodo sono gli stessi, non è necessario value = "someAttr"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.