这个问题似乎微不足道,但我无法让它正常工作。我用jquery ajax调用我的Spring控制器映射。无论url中的值如何,someAttr的值始终为空字符串。请帮我确定原因。
-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".
}
答案 0 :(得分:120)
您应该使用@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) {
}
答案 1 :(得分:18)
使用@RequestParam
和其他可选元素有很多变体,例如
@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr
如果你没有required = false
- 默认情况下将需要param。
defaultValue = "someValue"
- 未提供请求参数或具有空值时用作回退的默认值。
如果请求和方法参数相同 - 您不需要value = "someAttr"