您如何接收带有弹簧控制器映射的 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

如何更好地控制玉兰花中的 URL?

Web API - 如何在控制器中接收 DateTime ('dd/MM/yyyy') 作为 Url 参数?

使用弹簧安全性和角度进行身份验证

Spring 4:如何将 RequestMapping URL 映射到特定控制器