springMVC参数绑定JSON类型的数据
https://www.cnblogs.com/tenWood/p/6736700.html?utm_source=itdadao&utm_medium=referral
需求就是:
现在保存一个Student,并且保存Student的friend,一个student会有多个朋友,这里要传递到后台的参数是:
var friends = new Array();
var o1 = {
"family": "大宅门",
"otherName": "lisi",
"desc": "亲密无间的好朋友"
}
var o2 = {
"family": "军大院",
"otherName": "wangwu",
"desc": "关系一般"
}
friends.push(o1);
friends.push(o2);
//要传递的参数:id=1 name=zhangsan age=10是要保存的student信息,并且friends是student的朋友信息;
data:{
"id": 1,
"name": "zhangsan",
"age": 10,
"friends":friends
},
一、包装类型来接收JSON类型的传参:
方法一其实就是 springMVC学习(11)-json数据交互和RESTful支持 中接收json数据;只不过包装了另一个po
前台代码,ajax传递数据:
<input type="button" onclick="saveFriend()" value="保存friend" />
<script type="text/javascript">
/**
* 保存朋友
*/
function saveFriend(){
var friends = new Array();
var o1 = {
"family": "大宅门",
"otherName": "lisi",
"desc": "亲密无间的好朋友"
}
var o2 = {
"family": "军大院",
"otherName": "wangwu",
"desc": "关系一般"
}
friends.push(o1);
friends.push(o2);
//要发送的参数
var params = {
"id": 1,
"name": "zhangsan",
"age": 10,
"friends":friends
};
$.ajax({
type: 'post',
url: '${pageContext.request.contextPath }/saveStudent',
contentType:'application/json;charset=utf-8',
dataType: 'json',
data: JSON.stringify(params),
success: function(data){
console.log(data);
}
});
}
</script>
Controller中接受这个参数:
/**
* 保存朋友
*/
@RequestMapping("/saveStudent")
@ResponseBody
public void saveStudent(@RequestBody StudendAndFriend studendAndFriend){
System.out.println("接收参数friends--->> " + studendAndFriend);
}
接收参数的包装类:
StudendAndFriend.java:
package com.cy.po;
import java.util.List;
/**
* 接收参数包装类
* @author chengyu
*
*/
public class StudendAndFriend {
private int id;
private String name;
private int age;
private List<Friend> friends;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Friend> getFriends() {
return friends;
}
public void setFriends(List<Friend> friends) {
this.friends = friends;
}
}
Friend.java:
package com.cy.po;
public class Friend {
private String family;
private String otherName;
private String desc;
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getOtherName() {
return otherName;
}
public void setOtherName(String otherName) {
this.otherName = otherName;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "Friend [family=" + family + ", otherName=" + otherName
+ ", desc=" + desc + "]";
}
}
后台成功接收参:

注意点:
ajax传参:
contentType:'application/json;charset=utf-8'; //contentType为application/json
data: JSON.stringify(params), //传的是字符串;
方法二、
传递String类型的json字符串过来,后台接收后,进行JSONArray解析成对应的List<Object>;
这里使用fastjson-1.2.2.jar包来对json字符串转化为javabean类型;
前端发送请求:
<input type="button" onclick="saveFriend2()" value="保存friend2" />
<script type="text/javascript">
/**
* 保存朋友2
*/
function saveFriend2(){
var friends = new Array();
var o1 = {
"family": "大宅门",
"otherName": "lisi",
"desc": "亲密无间的好朋友"
}
var o2 = {
"family": "军大院",
"otherName": "wangwu",
"desc": "关系一般"
}
friends.push(o1);
friends.push(o2);
friends = JSON.stringify(friends);
$.ajax({
type: 'post',
url: '${pageContext.request.contextPath }/saveStudent2',
dataType: 'json',
data: {
"id": 1,
"name": "zhangsan",
"age": 10,
"friends":friends
},
success: function(data){
console.log(data);
}
});
}
</script>
Controller接收这个参数:
//用的是fastjson
import com.alibaba.fastjson.JSONArray;
import com.cy.po.Friend;
/** * 保存朋友2 */ @RequestMapping("/saveStudent2") @ResponseBody public void saveStudent2(int id, String name, int age, String friends){ List<Friend> frientList = JSONArray.parseArray(friends, Friend.class); System.out.println("接收参数friends--->> " + frientList); }
可以看到前端发送参数:

controller中经过json解析为javabean:



浙公网安备 33010602011771号