jackson 学习之六:常用类注解
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
本文是《jackson 学习》系列的第六篇,继续学习 jackson 强大的注解能力,本篇学习的是常用的类注解,并通过实例来加深印象,下图是常用类注解的简介:
接下来逐个学习;
源码下载
如果您不想编码,可以在 GitHub 下载所有源码,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
这个 git 项目中有多个文件夹,本章的应用在 jacksondemo 文件夹下,如下图红框所示:
jacksondemo 是父子结构的工程,本篇的代码在 annotation 子工程中,里面的 classannonation 这个 package 下,如下图:
JsonRootName
JsonRootName 的设置如下:
开启 root 对象特性的代码以及序列化结果如下图,可见 JsonRootName 注解的 value 值 aaabbbccc 成了 root 对象的 key:
开启 root 对象的反序列化特性后,用上述红框 3 中的 json 字符串可反序列化成 Test 类的实例;
关于 root 对象的序列化和反序列化特性,可以参考jackson学习之四:WRAP_ROOT_VALUE(root对象);
JsonIgnoreProperties
该注解用于指定序列化和反序列化时要忽略的字段,如下所示,Test 类的 field1 和 field2 被设置为不参与序列化和反序列化操作:
演示代码是 JsonIgnorePropertiesSeriallization.java,执行结果如下图:
保持 Test.java 的 JsonIgnoreProperties 注解不变,再试试反序列化,对应的代码在 JsonIgnorePropertiesDeserializer.java,如下图,反序列化后 field1 和 field2 依然是 null,也就是说反序列化操作中,field1 和 field2 都被忽略了:
JsonIgnoreType
被该注解修饰的类,作为其他类的成员变量时,不论是序列化还是反序列化都被忽略了;
来验证一下,如下所示,TestChild 类被 JsonIgnoreType 注解修饰:
如下所示,再把 TestChild 作为 Test 类的成员变量:
序列化操作的代码是 JsonIgnoreTypeSerialization.java,执行结果如下图,可见类型为 TestChild 的 field1 字段,在序列化的时候被忽略了:
再来试试反序列化,代码在 JsonIgnoreTypeDeserializer.java,如下图,可见带有注解 JsonIgnoreType 的类作为成员变量,在反序列化时会被忽略:
JsonAutoDetect
序列化和反序列化时自动识别的范围,如下:
fieldVisibility 属性有以下值可选:
验证,如下图,College 类设置了注解,fieldVisibility 是 PUBLIC_ONLY,红框中显示 age 字段是 protected 类型的:
序列化结果如下图红框,age 字段不是 public,所以没有输出:
fieldVisibility 改成 NON_PRIVATE 再试试:
如下图红框,age 不是 private,所以可以被序列化:
JsonPropertyOrder
这个注解好理解,就是指定序列化的顺序,注意该注解仅在序列化场景有效;
先看看没有 JsonPropertyOrder 注解时的序列化顺序,Test.java 如下所示,是和代码的顺序一致的:
此时对 Test 的实例做序列化操作,结果如下图,顺序和代码顺序一致:
现在给 Test 类加上 JsonPropertyOrder 注解,顺序是 field2、field0、field1:
执行结果如下图所示,也是 field2、field0、field1:
JsonInclude
注解 JsonInclude 仅在序列化场景有效;
通过该注解控制某些字段不被序列化(例如空字符串不被序列化);
可以设置以下几种限制:
JsonInclude 涉及的知识点较多,已在一篇单独文章中详细说明,请参考《jackson学习之五:JsonInclude注解》;
至此,Jackson 的常用类注解的学习和实战就完成了,接下来的文章我们学习常用的属性注解;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/af129656810f0721035d223c4】。文章转载请联系作者。
评论