如上图,ajax中传入到后台的参数包含了数组和普通属性,那么在后端如何接收这些参数呢?
如果,采用request.getParamter("roleName");的方式,那么就要一个参数一个参数的取,这样不灵活。
Spring MVC 早就想到这种情况了,因此,可以自定义一个PO类或者VO类:
package com.paic.test.po;
import java.io.Serializable;
import java.util.List;
public class RoleResourcePO implements Serializable{
private static final long serialVersionUID = 1L;
private String roleName;
private String roleIdentify;
private String roleDesc;
private List<Integer> menuIdArr;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleIdentify() {
return roleIdentify;
}
public void setRoleIdentify(String roleIdentify) {
this.roleIdentify = roleIdentify;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
public List<Integer> getMenuIdArr() {
return menuIdArr;
}
public void setMenuIdArr(List<Integer> menuIdArr) {
this.menuIdArr = menuIdArr;
}
}
controller中可以这样处理:
@RequestMapping(value = "/role/addRole/submit",method = RequestMethod.POST)
public @ResponseBody Map<String,Object> submitAddRole(RoleResourcePO roleResourcePO,HttpServletRequest request){
Map<String,Object> repMap = new HashMap<String,Object>();
try{
xxxService.addRole(roleResourcePO);
//.............
}catch(Exception e){
}
return repMap;
}
这样参数roleResourcePO就能一次性全部拿到前端的参数了。
(注:上图中的menuIdArr数组作为参数传到后端的时候,需要用toString处理,否则报错,而且不能使用JSON.stringify(menuIdArr),否则在后端controller中的List中会得到这样奇怪的值:第一个值[1,最后一个为3] 带了中括号,这个问题上一篇有解释了。)
最后,如果前端只传一个数组,那么可以使用
下面介绍一下URL中传递数组参数方法:
使用ajax方式传递:
1
2
3
4
5
6
7
8
9
10
|
var param
= {titles:[ 'col1' , 'col2' , 'col3' ]}; $.ajax({url: "dd.php" ,
type: "post" ,
data:param, async: false ,
dataType: "json" ,
cache: false ,
error: function (data)
{ rtnObj
= data.responseText; },
beforeSend: function (XMLHttpRequest)
{ //ajaxStart(); },
complete: function (XMLHttpRequest,
textStatus) { //ajaxComplete(); },
success: function (data)
{ rtnObj
= data; }}); |
在springMVC中controller类接收数组参数的方法:
1
2
3
4
5
6
|
@RequestMapping (value= "/save" ,
method = RequestMethod.POST) @ResponseBody public String
save( @RequestParam (value
= "titles" )
String[] titles){ System.out.println(titles); return null ; } |