您如何接收带有弹簧控制器映射的 url 参数
Posted
技术标签:
【中文标题】您如何接收带有弹簧控制器映射的 url 参数【英文标题】:How do you receive a url parameter with a spring controller mapping 【发布时间】:2011-10-24 15:58:56 【问题描述】:这个问题看似微不足道,但我无法让它正常工作。我用 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".
【问题讨论】:
【参考方案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)
【讨论】:
如果其他人也在寻找@RequestParam
的官方文档,这里是:docs.spring.io/spring/docs/current/javadoc-api/org/…
对于试图为一个端点添加两种方法(一种带有参数,一种没有)的人,请务必使用 @RequestMapping
注释上的 params 字段,否则 Spring 会抱怨。【参考方案2】:
您有很多变体可以使用 @RequestParam
和其他可选元素,例如
@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr
如果你不输入required = false
- 默认情况下需要参数。
defaultValue = "someValue"
- 当请求参数未提供或具有空值时用作后备的默认值。
如果请求和方法参数相同 - 你不需要value = "someAttr"
【讨论】:
以上是关于您如何接收带有弹簧控制器映射的 url 参数的主要内容,如果未能解决你的问题,请参考以下文章
控制层类上的注解业务层的注入URL映射参数接收返回数据及网页模板RESTful