网站首页 > 资源文章 正文
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概览
- 本文是《jackson学习》系列的第六篇,继续学习jackson强大的注解能力,本篇学习的是常用的类注解,并通过实例来加深印象,下图是常用类注解的简介:
- 接下来逐个学习;
源码下载
如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示(
https://github.com/zq2599/blog_demos):
- 这个git项目中有多个文件夹,本章的应用在jacksondemo文件夹下,如下图红框所示:
- jacksondemo是父子结构的工程,本篇的代码在annotation子工程中,里面的classannonation这个package下,如下图:
JsonRootName
- JsonRootName的设置如下:
@JsonRootName(value = "aaabbbccc")
static class Test {
private String field0;
public String getField0() { return field0; }
public void setField0(String field0) { this.field0 = field0; }
}
- 开启root对象特性方法,以及序列化结果如下图,可见JsonRootName注解的value值aaabbbccc成了root对象的key:
- 开启root对象的反序列化特性后,用上述红框3中的json字符串可反序列化成Test类的实例;
- 关于root对象的序列化和反序列化特性,可以参考《jackson学习之四:WRAP ROOT(root对象) 》;
JsonIgnoreProperties
- 该注解用于指定序列化和反序列化时要忽略的字段,如下所示,Test类的field1和field2被设置为不参与序列化和反序列化操作:
@JsonIgnoreProperties({"field1", "field2"})
static class Test {
private String field0;
private String field1;
private String field2;
// 省去get、set、toString方法
- 演示代码是JsonIgnorePropertiesSeriallization.java,执行结果如下图:
- 保持Test.java的JsonIgnoreProperties注解不变,再试试反序列化,对应的代码在JsonIgnorePropertiesDeserializer.java,如下图,反序列化后field1和field2依然是null,也就是说反序列化操作中,field1和field2都被忽略了:
JsonIgnoreType
- 被该注解修饰的类,作为其他类的成员变量时,不论是序列化还是反序列化都被忽略了;
- 来验证一下,如下所示,TestChild类被JsonIgnoreType注解修饰:
@JsonIgnoreType
static class TestChild {
private int value;
// 省去get、set、toString方法
- 如下所示,再把TestChild作为Test类的成员变量:
static class Test {
private String field0;
private TestChild field1;
// 省去get、set、toString方法
- 序列化操作的代码是JsonIgnoreTypeSerialization.java,执行结果如下图,可见类型为TestChild的field1字段,在序列化的时候被忽略了:
- 再来试试反序列化,代码在JsonIgnoreTypeDeserializer.java,如下图,可见带有注解JsonIgnoreType的类作为成员变量,在反序列化时会被忽略:
JsonAutoDetect
- 序列化和反序列化时自动识别的范围,如下:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class College {
private String name;
private String city;
protected int age = 100;
- fieldVisibility属性有以下值可选:
ANY // 所有
NON_PRIVATE // private之外的
PROTECTED_AND_PUBLIC // protected和public的(此时privte和默认的package access时不能被自动识别的)
PUBLIC_ONLY // public的
NONE // 禁止自动识别
DEFAULT // 默认的,用于继承父类的自动识别的范围
- 验证,如下图,College类设置了注解,fieldVisibility是PUBLIC_ONLY,红框中显示age字段是protected类型的:
- 序列化结果如下图红框,age字段不是public,所以没有输出:
- fieldVisibility改成NON_PRIVATE再试试:
- 如下图红框,age不是private,所以可以被序列化:
JsonPropertyOrder
- 这个注解好理解,就是指定序列化的顺序,注意该注解仅在序列化场景有效;
- 先看看没有JsonPropertyOrder注解时的序列化顺序,Test.java如下所示,是和代码的顺序一致的:
static class Test {
private String field0;
private String field1;
private String field2;
// 省去get、set、toString方法
- 此时对Test的实例做序列化操作,结果如下图,顺序和代码顺序一致:
- 现在给Test类加上JsonPropertyOrder注解,顺序是field2、field0、field1:
@JsonPropertyOrder({"field2", "field0", "field1"})
static class Test {
private String field0;
private String field1;
private String field2;
// 省去get、set、toString方法
- 执行结果如下图所示,也是field2、field0、field1:
JsonInclude
- 注解JsonInclude仅在序列化场景有效;
- 通过该注解控制某些字段不被序列化(例如空字符串不被序列化);
- 可以设置以下几种限制:
ALWAYS // 默认策略,任何情况都执行序列化
NON_NULL // 非空
NON_ABSENT // null的不会序列化,但如果类型是AtomicReference,依然会被序列化
NON_EMPTY // null、集合数组等没有内容、空字符串等,都不会被序列化
NON_DEFAULT // 如果字段是默认值,就不会被序列化
CUSTOM // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰的字段是否序列化
USE_DEFAULTS // 当JsonInclude在类和属性上都有时,优先使用属性上的注解,此时如果在序列化的get方法上使用了JsonInclude,并设置为USE_DEFAULTS,就会使用类注解的设置
- JsonInclude涉及的知识点较多,已在一篇单独文章中详细说明,请参考《jackson学习之五:JsonInclude注解 》;
至此,Jackson的常用类注解的学习和实战就完成了,接下来的文章我们学习常用的属性注解;
欢迎关注我的公众号:程序员欣宸
- 上一篇: 街机游戏中最难使用的指令,天霸封神斩根本排不上号
- 下一篇: MySQl——常见函数
猜你喜欢
- 2024-11-18 第03章-linux常用命令
- 2024-11-18 Python的文件处理
- 2024-11-18 Redash中文版配置MySQL数据源
- 2024-11-18 域名批量查询功能常用查询方法教程
- 2024-11-18 js中的正则表达式入门
- 2024-11-18 C++ string/stack/list/deque/multiset 小结
- 2024-11-18 C++ STL之(容器算法迭代器)
- 2024-11-18 微信小程序开发-自定义评论列表组件
- 2024-11-18 string 基本用法
- 2024-11-18 掼蛋技巧实战:保留变形木板!学会这个技巧打掼蛋所向披靡
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)