Skip to content

Databind annotations

Tatu Saloranta edited this page Nov 19, 2013 · 6 revisions

Jackson Data-Binding Annotations

In addition to core Jackson annotations, jackson-databind adds a small set of annotations that are tied to types defined in databind package. These are used for more fine-grained definition of handlers.

Serialization (writing JSON)

  • @JsonSerialize (method, field) can be used to denote:
    • Explicit serializer to use, with using(JsonSerializer) property
    • Explicit type to use (instead of actual run time type), with as(JsonSerializer) property (must be compatible with run time type, i.e. super-type)
    • Which bean properties to include (based on kind of value they have) with include() property: by default all properties are included, but can omit null-valued properties or properties with "default" value (value assigned by default bean constructor)

Deserialization (reading JSON)

  • @JsonDeserialize (method, field) can be used to denote:
    • Explicit deserializer to use:
      • using for values (scalars or structured)
      • contentUsing for values of structured types (elements of arrays and java.util.Collections, values of java.util.Maps)
      • keyUsing for keys of java.util.Maps
    • Explicit types to use with
      • as property (must be compatible with declared type, i.e. subtype)
      • Similarly keyAs() and contentAs() for specifying key type for java.util.Maps, content type for Collections, arrays.
    • Builder object (of any type) to use: builder
    • Converter object (of type Converter) to use
      • converter for property value itself, or
      • contentConverter for values of structured types (elements of array, java.util.Collections; values of java.util.Maps)
  • @JsonNaming (Class) is used to indicate PropertyNamingStrategy to use for annotated type
    • Note that databind module includes implementation of two alternate naming strategies:
      • PropertyNamingStrategy.LowerCaseWithUnderScoresStrategy: supports "C-style" naming, like first_name (instead of Java "firstName")
      • PropertyNamingStrategy.PascalCaseStrategy: supports names like "FirstName"
  • @JsonPOJOBuilder (Class) is used to configure so-called Builder objects; builders can be specified using @JsonDeserialize.builder property
  • @JsonValueInstantiator (Class) is used to specify custom ValueInstantiator to use for annotated type
    • Use of ValueInstantiator is an advanced topic.

Polymorphic type handling

Following annotations work together with standard @JsonTypeInfo annotation defined by core annotations package.

  • @JsonTypeResolver (class) can be used to plug in a custom type information handler, to replace default one (for specific class)
  • @JsonTypeIdResolver (class) can be used to replace standard type id converter (type to/from JSON String) with a custom version; for example, to create more convenient handler for using logical type names.

See also

It is also possible to use JAXB annotations in addition to or instead of these core annotations.

Clone this wiki locally