需求就是:

现在保存一个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:

springMVC参数绑定JSON类型的数据的更多相关文章

  1. 利用SpringMVC参数绑定实现动态插入数据

    javabean代码:public class User { private String firstName; private String lastName; public String getF ...

  2. springmvc:请求参数绑定集合类型

    一.请求参数绑定实体类 domain: private String username; private String password; private Double money; private ...

  3. [转载]SpringBoot系列: SpringMVC 参数绑定注解解析

    本文转载自 https://www.cnblogs.com/morethink/p/8028664.html, 作者写得非常好, 致谢! SpringMVC 参数绑定注解解析   本文介绍了用于参数绑 ...

  4. 一篇文章搞定SpringMVC参数绑定

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  5. spring-mvc---Controller参数绑定的类型

    Controller参数绑定的类型 Controller的绑定参数类型6种.没有参数(系统默认类型):简单类型(Intager,Double)等:pojo类(对象):数组:集合:HashMap等. 我 ...

  6. SpringMVC参数绑定,这篇就够了!

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  7. SpringMVC参数绑定(未完待续)

    1. Strut2与SpringMVC接收请求参数的区别 Struts2通过action类的成员变量接收SpringMVC通过controller方法的形参接收 2. SpringMVC参数绑定流程 ...

  8. SpringMvc参数绑定出现乱码解决方法

    在SpringMvc参数绑定过程中出现乱码的解决方法 1.post参数乱码的解决方法 在web.xml中添加过滤器 <!-- 过滤器 处理post乱码 --> <filter> ...

  9. 存在日期类型的JSON数据,进行SpringMVC参数绑定时存在的问题和解决方案

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 首先是发送AJAX请求的html页面 <!DOCTYPE html> <html> <head> <m ...

随机推荐

  1. python面试知识总结

    1. 先做自我介绍 2. 做Python几年了?为什么选择Python?3. 学历?大学什么专业?4. 除了Python以外对其他语言有没有了解?5. 你对Python这门语言的看法?6. 在学习Py ...

  2. 关于const的一些注意事项

    1.const对象必须初始化,一旦创建其值就无法更改 2.默认情况下,const对象仅在文件内有效,若想在多个文件中使用同一个const对象,就是不在每个文件独立的定义一个const对象,可以进行如下 ...

  3. DevExpress v17.2新版亮点—WPF篇(二)

    用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v17.2 新的Hamburger Menu.Sched ...

  4. 【笔记】《深入浅出MFC》第5章 总观Application Framework

    凝聚性强.组织化强的类库就是Application Framework.一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是Application Framework ...

  5. Excel根据人名匹配得到编号

    操作步骤:输入公式 =IF(COUNTIF($E$2:$E2,$E2)>COUNTIF($B:$B,$E2),"",INDEX(C:C,SMALL(IF($B$1:$B$10 ...

  6. 0121 集合类 ArrayList 的练习

    集合接口的常用方法: 1.List接口 public class Jihe { public static void main(String[] args) { ArrayList<String ...

  7. Android 运行 Linux 可执行程序

    /**************************************************************************** * Android 运行 Linux 可执行 ...

  8. 允许发生http请求

  9. CF1096. G. Lucky Tickets(快速幂NTT)

    All bus tickets in Berland have their numbers. A number consists of n digits (n is even). Only k dec ...

  10. uva1482:Playing With Stones (SG函数)

    题意:有N堆石子,每次可以取一堆的不超过半数的石子,没有可取的为输. 思路:假设只有一堆,手推出来,数量x可以表示为2^p-1形式的必输. 但是没什么用,因为最后要的不是0和1,而是SG函数:所以必输 ...