1、对象的序列化和反序列化都什么时候用?

当你想把内存中的对象保存到磁盘上的文件或者数据库中时,当你想用套接字在网络上传送对象时,当你想通过RMI传输对象时就牵扯到对象的序列化和反序列化了。

2、什么是序列化和反序列化

对象的序列化就是把对象转化成字节序列进行发送、存储,反序列化在接收和读取的时候把字节序列转化成对象。

3、序列化和反序列化都需要哪些操作对象要实现java.io.Serializable接口

增加序列化 ID(private static final long serialVersionUID)

转化成便于传输的格式

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 : name.trim();}

public String getSex() {return sex;}

public void setSex(String sex) {this.sex = sex == null ? null : sex.trim();}

public String getPhone() {return phone;}

public void setPhone(String phone) {this.phone = phone == null ? null : phone.trim();}

}

Controller类

@RequestMapping(“getUsers”)

@ResponseBody

public List getUsers(){

List 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对象,如果是text则返回文本字符串。一般用jquery的ajax时我们都是contentType:“application/json”,dataType:”JSON”

向后端发送json字符串的实例:

$(document).ready(function(){

var saveDataAry=[];

var data1={“name”:”test”,”phone”:”123″};

var data2={“name”:”ququ”,”phone”:”456″};

saveDataAry.push(data1);

saveDataAry.push(data2);

$.ajax({

type:”POST”,

url:”http://localhost:8080/saveUser”,

dataType:”json”,

contentType:”application/json”,

data:JSON.stringify(saveDataAry),

success:function(data){

alert(data);

}

});

后端controller

@RequestMapping(value = “saveUser”, method = {RequestMethod.POST})

@ResponseBody

public void saveUser(@RequestBody List users) {

System.out.println(users);

}

总结:前端向后端传递json时需要转化成json字符串,后端通过@ResponseBody可以把这个json字符串映射成java对象或者hashMap。


版权声明:本文为weixin_35182625原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_35182625/article/details/111982565