【问题标题】:How do you receive a url parameter with a spring controller mapping您如何接收带有弹簧控制器映射的 url 参数
【发布时间】: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".
}

【问题讨论】:

    标签: spring-mvc


    【解决方案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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多