简单POJO对象
所谓简单POJO, 是指没有继承, 对象属性 的POJO类
忽略序列化属性的方法主要为:
- @JsonInclude
- @JsonIgnore
- @JsonIgnoreProperties
- @JsonView
- @JsonFilter
@JsonInclude
作用于POJO类上,声明该类序列化哪种值类型
的属性.
- ALWAYS: 默认值, 序列化规则与值无关.
- NON_NULL: 非’null’的值才进行序列化
- NON_ABSENT:
- NON_EMPTY: 非null与空字符串的值
- NON_DEFAULT: 非默认值
- CUSTOM:
- USE_DEFAULTS:
@JsonIgnore
作用于属性与getter方法上.
忽略该属性
@JsonIgnoreProperties
作用于类.
定义该类所要忽略的属性.
@JsonView
@JsonInclude
, @JsonIgnore
与@JsonIgnoreProperties
都是类级别的定义序列化.也就是定义后,一旦使用这个类,便必须按定义好的规则序列化.
而@JsonView
可以将类中的属性划分为不同的组
, 在序列化时指定一个组
,即只将属于该组的属性
进行序列化.
- 一个属性可以属于多个组,而序列化时只能指定一个组
- 组可用
class
或interface
表示 - 组可继承另一个组(即拥有父组的全部属性)
@JsonFilter
编程式自定义序列化规则.
序列化对象属性
@JsonUnwrapped
将对象内的属性当做当前对象的属性进行序列化
@JsonValue
将该注解的值作为该对象属性的值进行序列化
对象相互引用的无限递归问题
@JsonIgnore
使用@JsonIgnore将会引起无限递归的对象属性忽略.
@JsonBackReference
和@JsonManagedReference
@JsonBackReference标注的属性在序列化时,会被忽略(等同于@JsonIgnore
).@JsonManagedReference
在序列化时不起作用.
在反序列化时.若果没有@JsonManagedReference
,则不会自动注入@JsonBackReference标注的属性(被忽略的父或子);如果有@JsonManagedReference,则会自动注入自动注入@JsonBackReference标注的属性。
@JsonIdentityInfo
被注解的实体类每次被序列化时,Jackson都会被为它生成一个标识id,若遇到id相同的对象(即同一个对象),则不会再次对其序列化,直接忽略,可以断绝循环引用.
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
private Address address;