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

102

Эта проблема кажется тривиальной, но я не могу заставить ее работать должным образом. Я вызываю отображение контроллера 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".
}
кодировщик
источник

Ответы:

167

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

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

Вы даже можете вообще опустить @RequestParam, если захотите, и Spring будет считать, что это то, что есть:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}
Скаффман
источник
Если кто-то еще ищет официальную документацию @RequestParam, вот она: docs.spring.io/spring/docs/current/javadoc-api/org/…
tobias
23

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

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

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

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

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

Optio
источник