Jackson 经常使用注解

 
自动检测,(做用在类上)来开启/禁止自动检测。
fieldVisibility:字段属性的可见范围。
 
getterVisibility:getter的可见范围(对象序列化成json字符串时的可见范围)。
 
isGetterVisibility:is-getter的可见范围(如boolean类型的getter)。
 
setterVisibility:setter的可见范围(json字符串反序列化成对象时的可见范围)。
 
creatorVisibility:构造方法的可见范围。
 
可见范围是一个枚举,包括:
 
Visibility.ANY:表示从 private 到 public 修饰,均可见。
 
Visibility.NON_PRIVATE:表示除 private 修饰不可见外,其余均可见。
 
Visibility.PROTECTED_AND_PUBLIC:protected 和 public可见。
 
Visibility.PUBLIC_ONLY:仅 public 可见。
 
Visibility.NONE:因此皆不可见。
 
Visibility.DEFAULT:缺省,全部被 public 修饰的属性、 getter 和全部 setter(无论能见度)皆可见。
jackson 默认的字段属性发现规则以下:
全部被 public 修饰的字段 -> 全部被 public 修饰的 getter- > 全部被 public 修饰的 setter

2.@JsonIgnore

做用在字段或方法上,用来彻底忽略被注解的字段和方法对应的属性。
 

3.@JsonProperty

做用在字段或方法上,用来对属性的序列化/反序列化,能够用来避免遗漏属性,同时提供对属性名称重命名 
 
 

4.@JsonIgnoreProperties

做用在类上,用来讲明有些属性在序列化 / 反序列化时须要忽略掉,能够将它看作是 @JsonIgnore 的批量操做,但它的功能比 @JsonIgnore 要强,好比一个类是代理类,咱们没法将将 @JsonIgnore 标记在属性或方法上,此时即可用 @JsonIgnoreProperties 标注在类声明上,它还有一个重要的功能是做用在反序列化时解析字段时过滤一些未知的属性,不然一般状况下解析到咱们定义的类不认识的属性便会抛出异常。
能够注明是想要忽略的属性列表如 @JsonIgnoreProperties({"name","age","title"}),
也能够注明过滤掉未知的属性如 @JsonIgnoreProperties(ignoreUnknown=true)

5.@JsonUnwrapped

做用在属性字段或方法上,用来将子JSON对象的属性添加到封闭的 JSON 对象。
 

6.@JsonIdentityInfo

2.0+ 版本新注解,做用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,一般是用来解决循环嵌套的问题。
 
 

7.@JsonNaming

 jackson 2.1+ 版本的注解,做用于类或方法,注意这个注解是在 jackson-databind 包中而不是在 jackson-annotations 包里,它可让你定制属性命名策略,做用和前面提到的 @JsonProperty 的重命名属性名称相同。
 

8.@JsonTypeInfo

做用于类/接口,被用来开启多态类型处理,对基类/接口和子类/实现类都有效。
 

9.@JsonSubTypes

做用于类/接口,用来列出给定类的子类,只有当子类类型没法被检测到时才会使用它,通常是配合 @JsonTypeInfo 在基类上使用。
 
做用于子类,用来为多态子类指定类型标识符的值。
 
 做用于类,能够自定义多态的类型标识符,这个平时不多用到,主要是现有的通常就已经知足绝大多数的需求了,若是你须要比较特别的类型标识符,建议使用这2个注解,本身定制基于 TypeResolverBuilde r和 TypeIdResolver 的类便可。
 

12.@JsonSerialize 和 @JsonDeserialize

做用于方法和字段上,经过 using(JsonSerializer)和using(JsonDeserializer)来指定序列化和反序列化的实现,一般咱们在须要自定义序列化和反序列化时会用到,好比下面的例子中的日期转换。
 

13.@JsonPropertyOrder

做用在类上,被用来指明当序列化时须要对属性作排序,它有2个属性,
一个是 alphabetic:布尔类型,表示是否采用字母拼音顺序排序,默认是为 false,即不排序。
 
 

14.JsonView

视图模板,做用于方法和属性上,用来指定哪些属性能够被包含在 JSON 视图中。
 
 

15.@JsonFilter

Json属性过滤器,做用于类,做用同上面的 @JsonView,都是过滤掉不想要的属性,输出本身想要的属性。和 @FilterView 不一样的是 @JsonFilter 能够动态的过滤属性,好比我不想输出以 system 开头的全部属性。
 

16.@JsonIgnoreType

做用于类,表示被注解该类型的属性将不会被序列化和反序列化。
 
 

17.@JsonAnySetter

做用于方法,在反序列化时用来处理遇到未知的属性的时候调用,在本文前面咱们知道能够经过注解 @JsonIgnoreProperties(ignoreUnknown=true)  来过滤未知的属性,可是若是须要这些未知的属性。
 
 

18.@JsonCreator

 做用于方法,一般用来标注构造方法或静态工厂方法上,使用该方法来构建实例,默认的是使用无参的构造方法,一般是和 @JsonProperty 或 @JacksonInject 配合使用。
 

19.@JacksonInject

做用于属性、方法、构造参数上,被用来反序列化时标记已经被注入的属性。
 
 

20.@JsonPOJOBuilder

做用于类,用来标注如何定制构建对象,使用的是 builder 模式来构建,好比 Value v = new ValueBuilder().withX(3).withY(4).build(); 这种就是 builder 模式来构建对象,一般会喝 @JsonDeserialize.builder 来配合使用。
相关文章
相关标签/搜索