序列化与反序列化

序列化与反序列化

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。反之则为反序列化。

例如:在Java中,后台返回数据给前端,一般都将其转成 Json对象,这个把java对象转成 Json 对象的过程就是序列化。

妙用com.fasterxml.jackson.annotation.*系列注解

巧妙地利用com.fasterxml.jackson.annotation.*系列的注解可以在前后端交互数据时候,起到灵活转换的功效。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
</dependency>

@JsonProperty

用在一般属性上

@JsonProperty用在属性上时,在序列化的时候,会将属性名称序列化成指定的名称。

【示例】
有一个 Test 对象,含有两个Field,分别为fieldOnefileTwo

@Data
public class Test{
    private String fieldOne = "xxx";
    private String fileTwo = "yyy";
}

正常序列化:字段名相同

{"fieldOne":"xxx" , "fileTwo":"yyy"}

现在加上@JsonProperty注解

@Data
public class Test{
	@JsonProperty(value = "fieldThree") // 只有 value 属性可以省略 ("fieldThree")
    private String fieldOne;
    private String fileTwo;
}

序列化:这个时候可以看到序列化后fieldOne变成了fieldThree

{"fieldThree":"xxx" , "fileTwo":"yyy"}

常用属性:

  1. value:表示字段名称
  2. access:设置该字段的访问控制权限
    • JsonProperty.Access.WRITE_ONLY:表示这个字段只能被反序列化,序列化时会被限制访问
    • JsonProperty.Access.READ_ONLY:表示这个字段只能被序列化,反序列化时会限制访问

用在集合属性上

@JsonProperty用在集合属性上时,在序列化的时候,会copy一份集合以指定名称名称,也就是说序列化后会存在两个集合,一个原名的,一个指定命名的。两个集合除了名字不同其余都一样。

@JsonAlias

@JsonAlias用来指定字段的别名,在反序列化的时候,会轮流把指定的一个别名或多个别名的属性的值赋给这个字段,这个过程是重复赋值的过程
【示例】

@Data
public class Test{
    private String fieldOne;
    private String fileTwo;
}

Json对象:

{"fieldThree":"xxx" , "fileTwo":"yyy"}

因为Json对象没有fieldOne字段,所以反序列化时,是匹配不到java对象的fieldOne字段的。

若加上@JsonAlias("fieldThree")指定别名

@Data
public class Test{
	@JsonAlias("fieldThree")
    private String fieldOne;
    private String fileTwo;
}

这时候序列化就会把Json对象中的fieldThree字段匹配到Java对象的fieldOne字段。

另外,@JsonAlias也可以贴在Setter方法上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值