Springboot前后端数据传递的序列化数据格式:json字符串Springboot进⾏前后端数据传递格式json字符串的简单理解
1、对象的序列化和反序列化都什么时候⽤?
当你想把内存中的对象保存到磁盘上的⽂件或者数据库中时,当你想⽤套接字在⽹络上传送对象时,当你想通过RMI传输对象时就牵扯到对象的序列化和反序列化了。
2、什么是序列化和反序列化
对象的序列化就是把对象转化成字节序列进⾏发送、存储,反序列化在接收和读取的时候把字节序列转化成对象。
3、序列化和反序列化都需要哪些操作
1. 对象要实现java.io.Serializable接⼝
2. 增加序列化 ID(private static final long serialVersionUID)
3. 转化成便于传输的格式
4、可能有⼈会问了,在项⽬开发中我们使⽤的是⽐较流⾏的前后端分离,我向前端传输数据的时候也没有进⾏这些操作啊?
下⾯就是我要说的在进⾏项⽬开发过程中常⽤的序列化格式json字符串。看过javaSE源码的都知道字符串是已经实现了Serializable接⼝的,所以字符串这种数据类型很⽅便⽤于传输,因为序列化和反序列的那些操作jdk已经给咱们封装好了,不需要咱们在考虑只需要专注于业务就ok了。
5、json
什么是Json:⼀种数据表⽰形式,JSON:JavaScript Object Notation对象表⽰法。
Json语法规则:
1)数据在键值对中
2)数据由逗号分隔
3)花括号保存对象
4)⽅括号保存数组
⽐如这样:
{ "firstName":"John" , "lastName":"Doe" }
这样:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
或者这样:
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
6、springboot的json序列化
Springboot⽬前最⽕的框架,在进⾏对象传输的时候springboot是怎么处理的呢,下⾯我写⼀个例⼦进⾏说明:
6.1、后端向前端发送
对象类
public class User{
private Integer id;
private String name;
private String sex;
private String phone;
public User() {}
public User(String name, String phone){
this.name = name;
this.phone = phone;
}
public Integer getId() {return id; }
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name == null ? null : im();}
public String getSex() {return sex;}
public void setSex(String sex) {this.sex = sex == null ? null : im();}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone == null ? null : im();}
}
Controller类
@RequestMapping("getUsers")
@ResponseBody
public List<User> getUsers(){
List<User> users = new ArrayList<>();
users.add(new User("ll","123"));
users.add(new User("gg","456"));
users.add(new User("monday","789"));
return users;
}
浏览器访问后显⽰
总结:springboot项⽬中使⽤@ResponseBody或者@RestController⾃动的将对象转化成json字符串传递给前端(原理是默认使⽤jackson包进⾏的处理)
6.2、前端向后端发送json字符串
前端字符串-->json对象
1)jQuery⽅式
var obj = $.parseJSON(json);
2)eval⽅式
var obj = eval("("+json+")");
3)json2.js⽅式
var obj = JSON.parse(json);
前端json对象--> 字符串
var jsonText = JSON.stringify(json);
以jQuery的ajax为例,如下代码所⽰,contentType设置参数的类型,如果为“application/json”时,data只能是json字符串⽽不能是json对象(否则会报错),如果contentType这⼀项不写则data会默认json对象,还有dataType这⼀项,是设置返回的数据的类型的,如果是JSON则逾期返回的数据是json对象(jquery会把后端返回的字符串尝试通过JSON.parse()尝试解析为js对象),如果是text则直接显⽰
后端返回的json字符串。⼀般⽤jquery的ajax时我们都是contentType:“application/json”,dataType:"JSON"
向后端发送json字符串的实例:
<script type="text/javascript">
$(document).ready(function(){
var saveDataAry=[];
var data1={"name":"test","phone":"123"};
var data2={"name":"ququ","phone":"456"};
jquery框架原理saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"localhost:8080/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveDataAry),
success:function(data){
alert(data);
}
});
</script>
后端controller
@RequestMapping(value = "saveUser", method = {RequestMethod.POST})
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
System.out.println(users);
}
总结:前端向后端传递json时需要转化成json字符串,后端通过@RequestBody可以把这个json字符串映射成java对象或者hashMap。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论