**************************************************************************************************************
属性命名
@JsonProperty
(也表示要包含属性)用于表示外部属性名称,数据格式中使用的名称(JSON或其他支持的数据格式之一)@JsonProperty.value
: 要使用的名称@JsonProperty.index
: 要使用的物理索引,如果数据格式(JSON 除外)是基于索引的@JsonProperty.defaultValue
:定义为元数据的文本默认值。注意:核心数据绑定不使用这个值;它目前只暴露给扩展模块。
财产包含
@JsonAutoDetect
:用于覆盖属性自省定义的类注释。- 使用不同属性的不同访问器类型的设置:
creatorVisibility
用于将构造函数检测为 Creator 方法(以及少量“众所周知的”静态工厂方法,例如valueOf()
)fieldVisibility
用于检测 Java 对象字段getterVisibility
用于检测“getters”:名称以“get”-前缀开头的无参数值返回方法isGetterVisibility
用于检测boolean
/Boolean
-returning,名称以“is”开头的无参数方法 - 前缀setterVisibility
用于检测“setter”:名称以“set”-前缀开头的单参数采用方法
- 所有属性都使用
Visibility
level 作为值:- ANY:无论其可见性如何,都会自动检测到隐含类型的访问器
- NON_PRIVATE:隐含类型的访问器自动检测,如果其可见性不是
private
- PROTECTED_AND_PUBLIC:自动检测隐含类型的访问器,如果它是
public
或protected
- PUBLIC_ONLY:隐含类型的访问器仅在它是时自动检测到
public
- NONE:从不自动检测到隐含类型的访问器
- DEFAULT:表示“使用全局默认值”的伪值(也是上面列出的注释属性的默认值)
- 使用不同属性的不同访问器类型的设置:
@JsonIgnore
:用于忽略指定属性的简单注释:- 只需要添加到访问器/修改器之一(字段、getter/setter、构造函数参数),但会影响“整体”属性:即,为“getter”添加注释也会禁用“setter”
- ...除非“setter”有
@JsonProperty
,在这种情况下,这被认为是启用“setter”但没有“getter”的“拆分属性”(“只读”,因此可以从输入中读取该属性,但不写入输出)
- ...除非“setter”有
- 只需要添加到访问器/修改器之一(字段、getter/setter、构造函数参数),但会影响“整体”属性:即,为“getter”添加注释也会禁用“setter”
@JsonIgnoreProperties
: per-class annotation 以列出要忽略的属性,或指示要忽略任何未知属性。- 在序列化时,
@JsonIgnoreProperties({"prop1", "prop2"})
忽略列出的属性 - 在反序列化时,
@JsonIgnoreProperties(ignoreUnknown=true)
忽略没有 getter/setter 的属性
- 在序列化时,
@JsonIgnoreType
: 每类注解,表示所有注解类型的属性都将被忽略。@JsonInclude
: 用于定义序列化时是否不应包含某些“非值”(空值或空值)的注释;可用于每个属性以及类的默认值(用于类的所有属性)
属性文档、元数据
@JsonPropertyDescription
(在 2.3 中添加):用于定义逻辑属性的人类可读描述的注释。- 核心数据绑定不使用,但JSON 模式生成器使用它在模式中添加描述。
反序列化和序列化细节
@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 Id
for对象,而不是使用类名或外部类型名。@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
)允许为端点启用/禁用SerializationFeature
s 和sDeserializationFeature
还要注意注解是不共享的(即反序列化器不传递方法注解;序列化器也不传递参数注解),所以在某些情况下你可能需要违反 DRY 原则,添加重复的注解