Как вы получаете параметр url с сопоставлением контроллера spring


этот вопрос кажется тривиальным, но я не могу заставить его работать должным образом. Я вызываю свой весенний контроллер сопоставления с jQuery ajax. Значение для someAttr всегда является пустой строкой, независимо от значения в url-адресе. Пожалуйста, помогите мне определить, почему.

-URL-адрес называется

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

-Регулятора Отображение

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

2 ответа:

вы должны использовать @RequestParam вместо @ModelAttribute, например,

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

вы даже можете опустить @RequestParam в целом, если вы выберете, и весна предположит, что это так:

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

у вас есть много вариантов использования @RequestParam С дополнительными элементами, например,

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

если вы не ставите required = false - param будет требоваться по умолчанию.

defaultValue = "someValue" - значение по умолчанию для использования в качестве резервного, если параметр запроса не указан или имеет пустое значение.

если запрос и метод param одинаковы-вам не нужно value = "someAttr"