码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC的@RequestParam的解释

时间:2017-08-31 17:54:08      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:host   name   赋值   mvc   分隔符   i++   方法   request   param   

自SpringMVC4.2之后,RequestParam内部有4个参数:

1、String name

2、String value

3、boolean required

4、String defaultValue

其中name和value分别是对方的别名,即二者没区别,我个人比较喜欢用name,因为它的某些特性使得name这个名字更直观,下面会说到。

先看第一个映射方法的定义:

@RequestMapping("/paramTest0")
    public @ResponseBody String paramTest(Long id){
        String result = "";
        result += id;
        return result;
    }

①然后我在浏览器地址栏上输入:http://localhost:8080/test/hello/paramTest0

浏览器显示:null

这里引申出了SpringMVC的一个特性,即当浏览器中没有输入相应参数和值,那么SpringMVC会给id赋值为null,注意是null而非0,因此参数都最好不要用基础类型。

②在浏览器中输入:http://localhost:8080/test/hello/paramTest0?userName=zhang&userName=li&id=9&userName=shit

浏览器显示:9

说明浏览器中只要有输入需要的参数即可,而不管是否包含多余的参数,且没有规定顺序。

③在浏览器中输入:http://localhost:8080/test/hello/paramTest0?id=6

显示为:6

这个就不解释了。

#########################################分隔符##################################################

再看第二个映射方法的定义:

// 传参时可以http://ip:port/webapp/paramTest?userName=zhang&userName=wang 这种情况浏览器会将其拼接为userName="zhang,wang"
    @RequestMapping("/paramTest")
    public @ResponseBody String paramTest(@RequestParam(name="userName", required = false) String[] userNames, Long id){
        String result = "";
        if(userNames != null){
            for(int i=0;i<userNames.length;i++){
                result += userNames[i] + "#";
            }
        }
        result += id;
        return result;
    }

①然后在浏览器输入:http://localhost:8080/test/hello/paramTest?userName=zhang&userName=li&id=5&userName=fuck

显示为:zhang#li#fuck#5

由此引申出:首先URL请求的参数部分可以有多对参数的参数名一样,如上面的userName,且它们中间可以用其它参数隔开(上面用了id=5隔开),

而相同的参数名的值将会被浏览器变成userName="zhang,li,fuck"(类似这样,告诉服务器这是个数组,这里的元素值的顺序则是跟在URL请求中的顺序是对应的)。

然后看我们方法参数里的是userNames而非userName,但是仍然成功了,这是因为RequestParam的name或value属性的值userName才是和浏览器那边传过来的参数名对应,而它注解的参数userNames就是此注解"userName"要“赋值”的变量。

还要注意,一个@RequestParam只能注解一个参数,即后面的Long id上是没有该注解的。

SpringMVC的@RequestParam的解释

标签:host   name   赋值   mvc   分隔符   i++   方法   request   param   

原文地址:http://www.cnblogs.com/silentdoer/p/7459395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!