Spring Boot --- Spring MVC: Jackson的自定义序列化属性


简单POJO对象

所谓简单POJO, 是指没有继承, 对象属性 的POJO类

忽略序列化属性的方法主要为:

  • @JsonInclude
  • @JsonIgnore
  • @JsonIgnoreProperties
  • @JsonView
  • @JsonFilter

@JsonInclude

作用于POJO类上,声明该类序列化哪种值类型的属性.

  1. ALWAYS: 默认值, 序列化规则与值无关.
  2. NON_NULL: 非’null’的值才进行序列化
  3. NON_ABSENT:
  4. NON_EMPTY: 非null与空字符串的值
  5. NON_DEFAULT: 非默认值
  6. CUSTOM:
  7. USE_DEFAULTS:

@JsonIgnore

作用于属性与getter方法上.
忽略该属性

@JsonIgnoreProperties

作用于类.
定义该类所要忽略的属性.

@JsonView

@JsonInclude, @JsonIgnore@JsonIgnoreProperties都是类级别的定义序列化.也就是定义后,一旦使用这个类,便必须按定义好的规则序列化.
@JsonView可以将类中的属性划分为不同的, 在序列化时指定一个,即只将属于该组的属性进行序列化.

  • 一个属性可以属于多个组,而序列化时只能指定一个组
  • 组可用classinterface表示
  • 组可继承另一个组(即拥有父组的全部属性)

@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;

猜你喜欢

转载自blog.csdn.net/d292222100/article/details/81945804