前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站点击跳转浏览。
在说明这个问题之前,先讲解一下序列化这个知识点 ,因为前端的序列化和后端的序列化不太一样
为什么要进行序列化
目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。
因为我们单方面的只把对象转成字节数组还不行,因为没有规则的字节数组我们是没办法把对象的本来面目还原回来的,所以我们必须在把对象转成字节数组的时候就制定一种规则(序列化),那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)。
后端序列化
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
简而言之序列化是把Java对象转换为字节序列的过程
在后端我们大都使用 @JsonProperty(“”) 这个注解来实现序列化,将这个把属性的名称序列化另一个名称,就是和数据库中的属性对应起来
如果使用不当会造成一个问题,就是前端给对象赋值之后,前端并没有传递这个字段,但是后端在序列化的时候,会把那些没有传递的属性也进行序列化,不过该属性里面的值为null,会影响到前端的判断
这个时候可以用 @JsonInclude(JsonInclude.Include.NON_EMPTY)这个注解
@JsonInclude 括号里面可以设置不同的类型
Include.Include.ALWAYS 默认
Include.NON_DEFAULT 属性为默认值不序列化
Include.NON_EMPTY 属性为 “” 或者为NULL都不序列化
Include.NON_NULL 属性为NULL时不序列化
前端序列化
定义:将对象转换成字符串
前端往往传递对象数据的时候需要序列化,是因为对象我们在存储的时候,存放的是堆空间,而在内存中存放的是一个指针,所以在取值的时候也是取到的指针,那么在向后端传值的时候,我们总不能传递一个指针过去吧,这时候就需要序列化一下这个对象,在后端接收到这个序列化的值之后,需要反序列化解析成一个对象。
var obj = {name:"zhangsan",age:10}; var stringObj = JSON.stringify(obj);// stringObj 就是序列化之后的结果 //相应的反序列化,把序列化之后的结果转化成结构体的过程 var newObj = JSON.parse(stringObj);// newObj 就是反序列化之后的结果