Подтвердить что ты не робот

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

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

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

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

Ответ 1

Вы должны использовать @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) {
}

Ответ 2

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

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

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

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

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