在Spring中实现后台对JSON传的数组对象给List类型的参数绑定

就是在后台接收前端传的JSON串,其中包含数组类型的数据。例如传一个user用户列表,后台用List来接收。

其实有多种方法都可以实现,大概就是JSON方式,和非JSON的key/value那种方法。但是后台前辈告诉我,要考虑前台不是所有都会这两种传参的方式,而且用JSON传参,前端肯定是会而且总是不容易出错的。由此写下来供温习


后台定义的用来接收用户类型的vo类
/**
 * 用来测试JSON传递list型的数据vo类
 *
 */
public class UserVo {
	
	private List<User> userList;

	/**
	 * @return the userList
	 */
	public List<User> getUserList() {
		return userList;
	}

	/**
	 * @param userList the userList to set
	 */
	public void setUserList(List<User> userList) {
		this.userList = userList;
	}
}

其中User的定义就不详举了,大致包含以下几个字段

  • name:姓名
  • gender:性别
  • address:地址

controller

/**
 * 测试是否能正确接收到JSON格式的user的list
 * @param userVo
 * @return
 */
@RequestMapping("/queryUsers.action")
@ResponseBody
public User UserQuery(@RequestBody UserVo userVo,HttpServletRequest request) {
	
	List<User> list = userVo.getUserList();
	for(User user:list) {
		System.out.println(user);
	}
	return null;
}

其中使用了@RequestBody注解,来解析JSON串

模拟前台传参

function helloworld(){
	$.ajax({
		type:'post',
		url:'${pageContext.request.contextPath}/queryUsers.action',
		data:JSON.stringify({"userList":[
			{"name":"李四","gender":"女","address":"泵山坡"},
			{"name":"张三","gender":"女","address":"呼呼坡"},
			{"name":"赵武","gender":"男","address":"落枫坡"},
			{"name":"孙柳","gender":"男","address":"破破坡"}]
		}),
		contentType:"application/json;charset=UTF-8",
		success:function(data){
			alert(data);
		} 
	});	
}

其中要求"userList"对应Vo的定义好的类变量,name等对应User的字段

输出结果

控制台输出

李四 [gender: 女  btd: null  address: 泵山坡	]
张三 [gender: 女  btd: null  address: 呼呼坡	]
赵武 [gender: 男  btd: null  address: 落枫坡	]
孙柳 [gender: 男  btd: null  address: 破破坡	]

重写了User的toString方法,绑定的结果一目了然

当然前端的客户端,就只是执行了一次空的alert()

猜你喜欢

转载自blog.csdn.net/SeasonSoy/article/details/83753028