概述
Jackson 属于转换json的重要工具,同时由于Spring boot 默认使用Jackson,了解下Jackson 序列化很有必要。
序列化
@JsonAnyGetter
@JsonAnyGetter 把Map中的 每个key都转成一个属性。
在 JSON 标准规范中是没有“注释”这个标准的,如果需要添加注释,你可以选择使用 jsonc(JSON with Comment) 标准。JSONC is a superset of JSON which supports comments.不过实际上大多数编辑器都支持解析 .json 格式的。
1.将非静态和无参数方法定义为“any getter"。它充当获取一组键值对的访问器。
2. 返回类型是Map.
可以在开头插入, 或追加在结尾, json就是JavaScript的语法, 和JS完全一样的。例子一 //注释 /*注释, 注意注释必须用换行隔开, 就是JS的语法, 不然一行都被注释掉了*/ {a:1,b:2,c:[3,4,5]} 。
4. 同一个类上只用一个属性.
代码实例
测试
序列化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方法上面的优先级比在类上的高。
自定义时间格式。
测试及结果
反序列化
不能加在"dependencies"里,但是可以加为package.json的最顶层项:{ "//": "This is comment 1","//": "This is comment 2"} 或者 { "//": [ "Line 1 of Comments", "Line 2 of Comments" ]} 。
@JsonCreator
json反序列化为java对象时,该注解用于定义构造函数。当从json创建java时,@JsonCreator注解的构造函数被会调用,如果没有@JsonCreator注解,则默认调用java类的无参构造函数。
实例
反序列化:
{
"id":1。
"name":"name"
}
测试及结果
@JacksonInject
用于属性,标识注入值而非在json获取值。
实例测试
@JsonAnySetter
1、首先在json语法中是没有注释语法的,添加注释//或者/**/在JSON文件中是不允许的,JSON有两种数据结构:名称/值对的集合:key : value样式;值的有序列表:就是Array;而在JSON的文档中说明只要是不符合上面两种结构的。
可以灵活地使用Map的key作为属性。反序列化时,JSON的属性将被简单地添加到map中
@JsonDeserialize
自定义反序列化。实现StdDeserializer或是其父类JsonSerializer
实例,反序列化时间。
测试及结果
@ JsonAlias
别名。反序列化期间属性的一个或多个其他替代名称
包容性注解
@JsonIgnoreProperties
作用在类上,用来说明有些属性在序列化/反序列化时需要忽略掉。
可以将它看做是@JsonIgnore的批量操作,但它的功能比@JsonIgnore要强,比如一个类是代理类,我们无法将将@JsonIgnore标记在属性或方法上,此时便可用@JsonIgnoreProperties标注在类 声 明上,它还有一个重要的功能是作用在反序列化时解析字段时过滤一些未知的属性,否则通常情况下解析到我们定义的类不认识的属性便会抛出异常。
可以注明是想要忽略的属性列表如@JsonIgnoreProperties({"name"})。
@JsonIgnore
作用在属性或方法上,用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解。
不能加在"dependencies"里,但是可以加为package.json的最顶层项: { "//": "This is comment 1", "//": "This is comment 2" } 或者 { "//": [ "Line 1 of Comments", "Line 2 of Comments" ] } 。
@JsonIgnoreType
作用于类,表示被注解该类型的属性将不会被序列化和反序列化
@JsonInclude
作用与类,序列化排除空值或null及默认值。
JsonAutoDetect
作用在类上,来开启/禁止自动检测
严格地说,JSON文件包含仅仅是数据,不能包含向编程语言中那样的注释。但是,有变通的在JSON文件中加“注释”,那就在JSON中增加一个充当注释的数据元素。例如 如果有必要,在JSON数据说明文档告诉使用此JSON数据的客户端:在。
总结
上面是Jackson中序列化与反序列化时注解,自定义注解以后另行整理。