Annotation Type JsonSerialize


  • @Target({ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
    @Retention(RUNTIME)
    public @interface JsonSerialize
    Annotation used for configuring serialization aspects, by attaching to "getter" methods or fields, or to value classes. When annotating value classes, configuration is used for instances of the value class but can be overridden by more specific annotations (ones that attach to methods or fields).

    An example annotation would be:

      @JsonSerialize(using=MySerializer.class,
        as=MySubClass.class,
        typing=JsonSerialize.Typing.STATIC
      )
    
    (which would be redundant, since some properties block others: specifically, 'using' has precedence over 'as', which has precedence over 'typing' setting)
    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element Description
      java.lang.Class<?> as
      Supertype (of declared type, which itself is supertype of runtime type) to use as type when locating serializer to use.
      java.lang.Class<?> contentAs
      Concrete type to serialize content value (elements of a Collection/array, values of Maps) as, instead of type otherwise declared.
      java.lang.Class<? extends Converter> contentConverter
      Similar to converter(), but used for values of structures types (List, arrays, Maps).
      java.lang.Class<? extends JsonSerializer> contentUsing
      Serializer class to use for serializing contents (elements of a Collection/array, values of Maps) of annotated property.
      java.lang.Class<? extends Converter> converter
      Which helper object is to be used to convert type into something that Jackson knows how to serialize; either because base type cannot be serialized easily, or just to alter serialization.
      JsonSerialize.Inclusion include
      Deprecated.
      As of Jackson 2.0, this annotation has been replaced by JsonInclude
      java.lang.Class<?> keyAs
      Concrete type to serialize keys of Map as, instead of type otherwise declared.
      java.lang.Class<? extends JsonSerializer> keyUsing
      Serializer class to use for deserializing Map keys of annotated property or Map keys of value type so annotated.
      java.lang.Class<? extends JsonSerializer> nullsUsing
      Serializer class to use for serializing nulls for properties that are annotated, instead of the default null serializer.
      JsonSerialize.Typing typing
      Whether type detection used is dynamic or static: that is, whether actual runtime type is used (dynamic), or just the declared type (static).
      java.lang.Class<? extends JsonSerializer> using
      Serializer class to use for serializing associated value.
    • Element Detail

      • using

        java.lang.Class<? extends JsonSerializer> using
        Serializer class to use for serializing associated value. Depending on what is annotated, value is either an instance of annotated class (used globablly anywhere where class serializer is needed); or only used for serializing the value of the property annotated.
        Default:
        com.fasterxml.jackson.databind.JsonSerializer.None.class
      • contentUsing

        java.lang.Class<? extends JsonSerializer> contentUsing
        Serializer class to use for serializing contents (elements of a Collection/array, values of Maps) of annotated property. Can only be used on accessors (methods, fields, constructors), to apply to values of Map-valued properties; not applicable for value types used as Array elements or Collection and Map values.
        Default:
        com.fasterxml.jackson.databind.JsonSerializer.None.class
      • keyUsing

        java.lang.Class<? extends JsonSerializer> keyUsing
        Serializer class to use for deserializing Map keys of annotated property or Map keys of value type so annotated. Can be used both on accessors (methods, fields, constructors), to apply to values of Map-valued properties, and on "key" classes, to apply to use of annotated type as Map keys (latter starting with Jackson 2.11).
        Default:
        com.fasterxml.jackson.databind.JsonSerializer.None.class
      • nullsUsing

        java.lang.Class<? extends JsonSerializer> nullsUsing
        Serializer class to use for serializing nulls for properties that are annotated, instead of the default null serializer. Note that using this property when annotation types (classes) has no effect currently (it is possible this could be improved in future).
        Since:
        2.3
        Default:
        com.fasterxml.jackson.databind.JsonSerializer.None.class
      • as

        java.lang.Class<?> as
        Supertype (of declared type, which itself is supertype of runtime type) to use as type when locating serializer to use.

        Bogus type Void can be used to indicate that declared type is used as is (i.e. this annotation property has no setting); this since annotation properties are not allowed to have null value.

        Note: if using() is also used it has precedence (since it directly specifies serializer, whereas this would only be used to locate the serializer) and value of this annotation property is ignored.

        Default:
        java.lang.Void.class
      • keyAs

        java.lang.Class<?> keyAs
        Concrete type to serialize keys of Map as, instead of type otherwise declared. Must be a supertype of declared type; otherwise an exception may be thrown by serializer.
        Default:
        java.lang.Void.class
      • contentAs

        java.lang.Class<?> contentAs
        Concrete type to serialize content value (elements of a Collection/array, values of Maps) as, instead of type otherwise declared. Must be a supertype of declared type; otherwise an exception may be thrown by serializer.
        Default:
        java.lang.Void.class
      • typing

        JsonSerialize.Typing typing
        Whether type detection used is dynamic or static: that is, whether actual runtime type is used (dynamic), or just the declared type (static).

        Note that Jackson 2.3 changed default to DEFAULT_TYPING, which is roughly same as saying "whatever". This is important as it allows avoiding accidental overrides at property level.

        Default:
        com.fasterxml.jackson.databind.annotation.JsonSerialize.Typing.DEFAULT_TYPING
      • converter

        java.lang.Class<? extends Converter> converter
        Which helper object is to be used to convert type into something that Jackson knows how to serialize; either because base type cannot be serialized easily, or just to alter serialization.
        Since:
        2.2
        Default:
        com.fasterxml.jackson.databind.util.Converter.None.class
      • contentConverter

        java.lang.Class<? extends Converter> contentConverter
        Similar to converter(), but used for values of structures types (List, arrays, Maps). Note that this property does NOT have effect when used as Class annotation; it can only be used as property annotation: this because association between container and value types is loose and as such converters seldom make sense for such usage.
        Since:
        2.2
        Default:
        com.fasterxml.jackson.databind.util.Converter.None.class
      • include

        @Deprecated
        JsonSerialize.Inclusion include
        Deprecated.
        As of Jackson 2.0, this annotation has been replaced by JsonInclude
        Which properties of annotated Bean are to be included in serialization (has no effect on other types like enums, primitives or collections). Choices are "all", "properties that have value other than null" and "properties that have non-default value" (i.e. default value being property setting for a Bean constructed with default no-arg constructor, often null).

        This property has been replaced by special-purpose JsonInclude annotation, introduced in Jackson 2.0.

        Note that Jackson 2.3 changed default to DEFAULT_INCLUSION, which is roughly same as saying "whatever". This is important because it allows hierarchic default values to be used.

        Default:
        com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion.DEFAULT_INCLUSION