jackson的常用注解

**************************************************************************************************************

属性命名

  • @JsonProperty(也表示要包含属性)用于表示外部属性名称,数据格式中使用的名称(JSON或其他支持的数据格式之一)
    • @JsonProperty.value: 要使用的名称
    • @JsonProperty.index: 要使用的物理索引,如果数据格式(JSON 除外)是基于索引的
    • @JsonProperty.defaultValue:定义为元数据的文本默认值。注意:核心数据绑定不使用这个值;它目前只暴露给扩展模块。

财产包含

  • @JsonAutoDetect:用于覆盖属性自省定义的类注释。
    • 使用不同属性的不同访问器类型的设置:
      • creatorVisibility用于将构造函数检测为 Creator 方法(以及少量“众所周知的”静态工厂方法,例如valueOf()
      • fieldVisibility用于检测 Java 对象字段
      • getterVisibility用于检测“getters”:名称以“get”-前缀开头的无参数值返回方法
      • isGetterVisibility用于检测booleanBoolean-returning,名称以“is”开头的无参数方法 - 前缀
      • setterVisibility用于检测“setter”:名称以“set”-前缀开头的单参数采用方法
    • 所有属性都使用Visibilitylevel 作为值:
      • ANY:无论其可见性如何,都会自动检测到隐含类型的访问器
      • NON_PRIVATE:隐含类型的访问器自动检测,如果其可见性不是private
      • PROTECTED_AND_PUBLIC:自动检测隐含类型的访问器,如果它是publicprotected
      • PUBLIC_ONLY:隐含类型的访问器仅在它是时自动检测到public
      • NONE:从不自动检测到隐含类型的访问器
      • DEFAULT:表示“使用全局默认值”的伪值(也是上面列出的注释属性的默认值)
  • @JsonIgnore:用于忽略指定属性的简单注释:
    • 只需要添加到访问器/修改器之一(字段、getter/setter、构造函数参数),但会影响“整体”属性:即,为“getter”添加注释也会禁用“setter”
      • ...除非“setter”有@JsonProperty,在这种情况下,这被认为是启用“setter”但没有“getter”的“拆分属性”(“只读”,因此可以从输入中读取该属性,但不写入输出)
  • @JsonIgnoreProperties: per-class annotation 以列出要忽略的属性,或指示要忽略任何未知属性。
    • 在序列化时,@JsonIgnoreProperties({"prop1", "prop2"})忽略列出的属性
    • 在反序列化时,@JsonIgnoreProperties(ignoreUnknown=true)忽略没有 getter/setter 的属性
  • @JsonIgnoreType: 每类注解,表示所有注解类型的属性都将被忽略。
  • @JsonInclude: 用于定义序列化时是否不应包含某些“非值”(空值或空值)的注释;可用于每个属性以及类的默认值(用于类的所有属性)

属性文档、元数据

  • @JsonPropertyDescription(在 2.3 中添加):用于定义逻辑属性的人类可读描述的注释。

反序列化和序列化细节

  • @JsonFormat:具有每种类型行为的一般注释;例如,可用于指定序列化日期/时间值时使用的格式。
    • lenient(布尔值)
    • locale(细绳)
    • pattern(细绳)
    • shape (Shape)
    • timezone(细绳)
    • with (JsonFormat.Feature[])
    • without (JsonFormat.Feature[])
  • @JsonUnwrapped: 用于定义该值在序列化时应“解包”(反序列化时再次包装)的属性注释,与 POJO 结构相比,导致数据结构扁平化。注意:值序列化为JSON对象(无法使用此机制)
  • @JsonView: 用于定义 View(s) 的属性注释,其中将包含属性以进行序列化、反序列化。

反序列化细节

  • @JacksonInject: 注释表示属性应该通过“注入”而不是从数据 (JSON) 中获取其值。
  • @JsonAnySetter: 用于将双参数方法定义为“任何设置器”的注释,用于反序列化否则未映射的 JSON 属性的值
  • @JsonCreator: 用于指示在反序列化期间应使用构造函数或静态工厂方法创建值实例的注释。
  • @JsonSetter:替代@JsonProperty,用于标记指定的方法是“setter-method”
  • @JsonEnumDefaultValue(在 2.8 中添加):用于在反序列化未知 Enum 值时定义默认值的注释。需要启用配置READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE功能。请参阅反序列化功能中的示例片段

序列化细节

  • @JsonAnyGetter: 用于将 getter 定义为“任何 getter”的注释,它返回一个java.util.Map,其内容将被序列化为 JSON 对象的附加属性,以及该对象可能具有的常规属性。
  • @JsonGetter:替代@JsonProperty,用于标记指定的方法是“getter-method”
  • @JsonPropertyOrder: 用于指定属性序列化顺序的注释
  • @JsonRawValue:每个属性标记,可用于指定属性的值将按原样“完全”包含在序列化中,没有转义或修饰——对于嵌入预序列化的 JSON(或任何数据格式)很有用正在使用)在输出中
  • @JsonValue:每个属性标记,指示 POJO 应该序列化是使用属性的值来完成的,通常是java.lang.String(如注释toString()方法)
  • @JsonRootName: 类注释用于指示用于根值的“包装器”条目的名称,如果启用了根包装

类型处理

  • @JsonSubTypes:类注解,用于表示注解类型的子类型;使用逻辑类型名称(而不是类名称)反序列化多态类型时是必需的
  • @JsonTypeId: 属性注解,用于指示属性值应该作为Type Idfor对象,而不是使用类名或外部类型名。
  • @JsonTypeInfo: 类/属性注释,用于指示序列化中包含哪些类型信息以及如何包含的详细信息。
  • @JsonTypeName: 用于定义逻辑类型名称的类注释,用于注释类;类型名称可以用作Type Id(取决于 的设置@JsonTypeInfo

对象引用,身份

  • @JsonManagedReference@JsonBackReference: 一对注释,用于指示和处理用一对匹配属性表达的父/子关系
  • @JsonIdentityInfo: class/property annotation 用于指示Object Identity在序列化/反序列化值时要使用的,以便可以正确反序列化对单个 Java Object 的多个引用。这可用于正确处理循环对象图和有向无环图。

元注释

该组包括用于其他注释的注释。

  • @JacksonAnnotation:标记注释添加到所有杰克逊定义的注释(包括此包中包含的所有其他注释)
  • @JacksonAnnotationsInside: 标记注解,用于表示自定义注解包含 Jackson 注解;用于允许“注释包”,使用 Jackson 注释注释的自定义注释(为什么?允许仅添加单个注释来表示多个 Jackson 注释集)

与 JAX-RS 一起使用(DropWizard,Jersey)

尽管值注释可以在 Jackson 本身所在的任何地方使用,无需额外工作,但在 JAX-RS 容器上使用 Jackson 时需要考虑一些额外的事情。这样的容器需要使用Jackson JAX-RS 提供程序(或等效的胶水实现来注册 Jackson,以便在 JSON 和 POJO 等外部格式之间转换内容)。

一个特定的限制是,虽然 Jackson 可以从传递的值中内省注释,但它不能直接访问资源方法上的注释。然而,提供者被交给了这些定义,并且它可以使用一些注释。

有关更多信息,请查看JAX-RS 提供者 wiki,但简短的故事是在某种程度上支持以下注释:

  • @JsonView: 适用于返回值(方法注释)和输入参数(参数注释)
  • @JsonRootName:类似适用于返回值和输入值。
  • @JacksonAnnotationsInside:完全支持,因此您可以创建和使用“注释包”
  • @JacksonFeature: JAX-RS 提供者特定注释(未包含在 中jackson-annotations)允许为端点启用/禁用SerializationFeatures 和sDeserializationFeature

还要注意注解是不共享的(即反序列化器不传递方法注解;序列化器也不传递参数注解),所以在某些情况下你可能需要违反 DRY 原则,添加重复的注解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值