善良的四季豆 · 最常用的两种C++序列化方案的使用心得(pr ...· 2 周前 · |
跑龙套的小狗 · C++ XML 序列化器-CSDN博客· 2 周前 · |
温文尔雅的大象 · C++ 序列化和反序列化-腾讯云开发者社区-腾讯云· 2 周前 · |
刚分手的甘蔗 · C++ XML对象序列化与反序列化_c++ ...· 2 周前 · |
不开心的拖把 · WPF快速入门系列(8)——MVVM快速入门 ...· 3 月前 · |
年轻有为的弓箭 · git查看一个commit属于哪个分支_镇上 ...· 1 年前 · |
有情有义的芹菜 · X509证书编码格式和扩展名_WangMar ...· 1 年前 · |
概述
Jackson 属于转换json的重要工具,同时由于Spring boot 默认使用Jackson,了解下Jackson 序列化很有必要。
序列化
@JsonAnyGetter
@JsonAnyGetter 把Map中的 每个key都转成一个属性 。
1.将非静态和无参数方法定义为“any getter"。它充当获取一组键值对的访问器。
2. 返回类型是Map.
3. 启用了一个接受布尔值的元素。当我们将false传递给enabled元素时,注释@JsonAnyGetter对该注释的方法无效.
4. 同一个类上只用一个属性.
5. 会将Map序列化为JSON。 Map的键将是JSON字段的名称,而该键的对应值将是对应的JSON字段的值
代码实例
测试
序列化json 后。
{"attr2":"val2","attr1":"val1"}
关闭 @JsonAnyGetter(enable=false)序列化后
{"properties":{"attr2":"val2","attr1":"val1"}}
@JsonGetter
是@JsonProperty注释的替代方法,用于将方法标记为getter方法。
代码实例
测试
输出结果
{"id":1,"name":"My bean"}
@JsonPropertyOrder
指定序列化属性顺序,作用与类。
实例指定序列化顺序 name,id
测试结果
{"name":"My order","id":1}
JsonPropertyOrder 支持alphabetic(按照字母顺序排序),默认alphabetic=false.
@JsonRawValue
@JsonRawValue可用于按原样序列化属性。该值不转义或引用。这在已经JSON中序列化的值或已引用值的情况下很有用。
可以使用可选的布尔参数值来定义此注释是否处于活动状态
结果
{"name":"My bean","json":{"attr":false}}
@JsonValue
用在字段或方法上(无参,有可序列化的返回值),表明Jackson在序列化该类实例时,只序列化字段的值或方法返回值。 一个类中最多使用一个@JsonValue注解
测试及结果
@JsonRootName
@JsonRootName作用在类上,指定序列化时根包装的名称。 需要与SerializationFeature.WRAP_ROOT_VALUE配合使用。
测试及结果
@JsonSerialize
可以作用在类,字段,getter方法,表示自定义序列化。字段和getter方法上面的优先级比在类上的高。
自定义时间格式。
测试及结果
反序列化
@JsonCreator
json反序列化为java对象时,该注解用于定义构造函数。当从json创建java时,@JsonCreator注解的构造函数被会调用,如果没有@JsonCreator注解,则默认调用java类的无参构造函数。
实例
反序列化:
{
"id":1,
"name":"name"
}
测试及结果
@JacksonInject
用于属性,标识注入值而非在json获取值。
实例测试
@JsonAnySetter
可以灵活地使用Map的key作为属性。反序列化时,JSON的属性将被简单地添加到map中
@JsonDeserialize
自定义反序列化。实现StdDeserializer或是其父类JsonSerializer
实例,反序列化时间。
测试及结果
@ JsonAlias
别名。反序列化期间属性的一个或多个其他替代名称
兼容性注解
@JsonIgnoreProperties
作用在类上,用来说明有些属性在序列化/反序列化时需要忽略掉。
可以将它看做是@JsonIgnore的批量操作,但它的功能比@JsonIgnore要强,比如一个类是代理类,我们无法将将@JsonIgnore标记在属性或方法上,此时便可用@JsonIgnoreProperties标注在类 声 明上,它还有一个重要的功能是作用在反序列化时解析字段时过滤一些未知的属性,否则通常情况下解析到我们定义的类不认识的属性便会抛出异常。
可以注明是想要忽略的属性列表如@JsonIgnoreProperties({"name"}),
也可以注明过滤掉未知的属性如@JsonIgnoreProperties(ignoreUnknown=true)
@JsonIgnore
作用在属性或方法上,用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解。
@JsonIgnoreType
作用于类,表示被注解该类型的属性将不会被序列化和反序列化
@JsonInclude
作用与类,序列化排除空值或null及默认值。
JsonAutoDetect
作用在类上,来开启/禁止自动检测
总结
上面是Jackson中序列化与反序列化时注解,自定义注解以后另行整理。
领取 专属20元代金券
Get大咖技术交流圈
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287