标签: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上是没有该注解的。
标签:host name 赋值 mvc 分隔符 i++ 方法 request param
原文地址:http://www.cnblogs.com/silentdoer/p/7459395.html