网站首页 > 编程文章 正文
概述
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中序列化与反序列化时注解,自定义注解以后另行整理。
猜你喜欢
- 2024-09-09 搞懂事件——C# 的event的机制深度理解
- 2024-09-09 C 容易犯错的新手问题有哪些?(c语言容易犯错误的地方)
- 2024-09-09 想要使用C#编程创建3D PDF转换器?Aspose.PDF必不可少
- 2024-09-09 .NET 大牛之路 019 | C#基础:理解装箱与拆箱
- 2024-09-09 在CSI.EXE中使用C#脚本绕过应用白名单(含缓解方案)
- 2024-09-09 在C#中向IC卡(通常指智能卡或集成电路卡)写入数据
- 2024-09-09 C#编程中如何使用线程(c# 线程编程)
- 2024-09-09 c# 串口连接xbee模块并且发送AT命令
- 2024-09-09 iOS开发生涯的初恋:详解Objective-C多项改进
- 2024-09-09 c# 串口连接xbee模块并且发送AT命令设置NI值
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)