您的位置:首页 > 编程语言 > Java开发

springmvc 接受数组,集合(list,set)类型的参数

2017-03-27 19:08 513 查看
注意:形参为集合时, 前台传递的一定是数组的形式(前台集合的形式没有测试)的值, 否则形参接受不到值。

形参为数组时,前台传递数组形式时,形参是接受不到数据的。可以通过get请求, 设置完成数组形参的设值, 如:  xxxxx?name=a&name=b

一:前台直接传递到controller数组。

1. springmvc框架中请求参数会自动绑定到方法的形参中。 但是当我们的形参是一个数组、集合(list, set)时, 参数是不能绑定成功的。

但是可以通过 添加属性@RequestParam(value="参数名[]"),来完成绑定的。

js:

$(function(){
$("#btn").click(function(){
var name = [];
var address = [];
for(var i = 0; i<5; i++){
name.push("name"+i);
address.push("address"+i);
}
$.ajax({
url:"/test/data/array",
data: {"name":name, "address":address, "test":"test1", "test":"test2"},
dataType:"json",
success: function(data){
alert(data);
}
});
});
});


Java:@RequestParam(value="name[]", required=false), 该注解的required默认值是true, 置为false,排除参数为必须参数的限制

@RequestMapping("array")
@ResponseBody
public Object array(@RequestParam(value="name[]", required=false) String[] name,
@RequestParam(value="address[]", required=false) List<String> address,  // 该list可以替换为set测试
String[] test) {
for (String attr : name) {
System.err.print(attr+",");
}
System.err.println();
for (String attr : address) {
System.err.print(attr+",");
}
System.err.println();
for (String attr : test) {
System.err.print(attr+",");
}
System.err.println();
System.err.println("name[].size:"+name.length +";   address[].size:"+address.size() + ";  test[].size:"+test.length);
return "xxxx";
}


输出结果:

name0,name1,name2,name3,name4,

address0,address1,address2,address3,address4,

test2,  // 只输出了一个值。 证明json数据相同的key,会被后来者覆盖

name[].size:5;   address[].size:5;  test[].size:1

二、通过设置相同name值的input表单, 造成到controller时该参数为数组

html代码:

<form action="/test/data/array">
<input name="test" value="test1"/><br />
<input name="test" value="test2"/><br />
<input name="test" value="test3"/><br />
<input name="test" value="test4"/><br />
<input type="submit" value="sub">
</form>


Java代码:

@RequestMapping("array")
@ResponseBody
public Object array(@RequestParam(value="name[]", required=false) String[] name,
@RequestParam(value="address[]", required=false) List<String> address,
String[] test) {
for (String attr : test) {
System.err.print(attr+",");
}
System.err.println();
System.err.println("test[].size:"+test.length);
return "xxxx";
}


输出结果:

test1,test2,test3,test4,

test[].size:4

 对于该种情况的数组, 通过观察url地址,会发现都是以tesst为key,所以很容易构造此类数据:
http://localhost:8080/test/data/array?test=test1&test=test2&test=test3&test=test4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐