http协议是应用层协议,http报文是字符串形式的(头+报文体),所以在应用层来说,交互都是**字符串**形式的交互。各种json库提供json对象,是json的一种存储和操作对象,主要为方便开发者的,想想你直接操作一个json字符串该有多费劲。http支持各种格式数据的传输,这个类型可以在content-type 中指定。所以,传输一个数字或者一个字符都是允许的。
tcp协议数据交互是以 stream流传输 ; udp协议是以 datagram形式传输。
比如 tcp 是使用 stream socket 传输数据 ; udp是以datagram socket 进行通讯;
摘取OSI网络7层协议
OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端,点到点的数据流。
应用层 : http /ftp/ssh协议
表示层、会话层(省略)
传输层 :tcp /udp
网络层 : ip
数据链路层 : MAC地址(网卡地址,全局唯一)
物理层 : 转化为 二进制流
后台@RequestBody接收的是一个json格式的字符串(一定是一个字符串)
1、Json对象:
先介绍一下json对象,对象的属性是可以用:对象.属性进行调用的。例如:
var person={"name":"zhangsan","sex":"男","age":"24"}//json对象
alert(person.name);//zhangsan
alert(typeof person);//person的类型,为object类型
---
2、Json字符串:JavaScript中的字符串是单引号或者双引号引起来的
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串
alert(person);//{"name":"zhangsan","sex":"男","age":"24"}
alert(typeof person);//person的类型,为string类型
---
3、JSON字符串和JOSN对象的转换
json字符串--->json对象:
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串
var personObject = JSON.parse(person);
json对象--->json字符串:
var person={"name":"zhangsan","sex":"男","age":"24"};//json对象
var personString = JSON.stringify(person);
在SpringMVC中基于REST开发时,前端传入后台的应该是一个json格式的字符串,而不是一个json对象
---
案例:
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
ajax请求的时候也要指定dataType: “json”,contentType:”application/json” 这样就可以轻易的将一个对象或者List传到Java后台
@Controller
@RequestMapping(value = "saveUser")
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
userService.batchSave(users);
}
后台用@RequestBody将其封装到List<User>中。然后进入Service层
那么 JSON的类型有哪些?
1.jsons数组类型
var json1=[
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName": "Jones" }
];
2.json对象类型
var json2= { "firstName":"John" , "lastName":"Doe" };