如何使用spring控制器映射接收url参数

cod*_*der 85 spring-mvc

这个问题似乎微不足道,但我无法让它正常工作.我用jquery ajax调用我的Spring控制器映射.无论url中的值如何,someAttr的值始终为空字符串.请帮我确定原因.

-URL叫

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6
Run Code Online (Sandbox Code Playgroud)

- 控制器映射

@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".
}
Run Code Online (Sandbox Code Playgroud)

ska*_*man 134

你应该使用@RequestParam而不是@ModelAttribute,例如

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

@RequestParam如果你选择的话,你甚至可以完全省略,而Spring会假设它是这样的:

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

  • 如果其他人也在寻找“@RequestParam”的官方文档,这里是:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation /请求参数.html (2认同)

Opt*_*tio 22

您可以使用许多变体来使用@RequestParam其他可选元素,例如

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr
Run Code Online (Sandbox Code Playgroud)

如果你不放required = false- 默认情况下将需要param.

defaultValue = "someValue" - 未提供请求参数或具有空值时用作回退的默认值.

如果请求和方法参数相同 - 您不需要 value = "someAttr"