JsonDeserialize
Date: 2016-12-04

com.fasterxml.jackson.databind.annotation

## Annotation Type JsonDeserialize

-     @Target(value={ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
      @Retention(value=RUNTIME)
      public @interface JsonDeserialize

  Annotation use for configuring deserialization aspects, by attaching to "setter" 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:

        @JsonDeserialize(using=MySerializer.class,
          as=MyHashMap.class,
          keyAs=MyHashKey.class,
          contentAs=MyHashValue.class
        )

  Something to note on usage:

  - All other annotations regarding behavior during building should be on Builder class and NOT on target POJO class: for example @JsonIgnoreProperties should be on Builder to prevent "unknown property" errors.
  - Similarly configuration overrides (see `ObjectMapper.configOverride(java.lang.Class<?>)`) should be targeted at Builder class, not target POJO class.

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `java.lang.Class<?>` | `as` Concrete type to deserialize values as, instead of type otherwise declared.
    `java.lang.Class<?>` | `builder` Annotation for specifying if an external Builder class is to be used for building up deserialized instances of annotated class.
    `java.lang.Class<?>` | `contentAs` Concrete type to deserialize content (elements of a Collection/array, values of Maps) values 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 JsonDeserializer>` | `contentUsing` Deserializer class to use for deserializing contents (elements of a Collection/array, values of Maps) of annotated property.
    `java.lang.Class<? extends Converter>` | `converter` Which helper object (if any) is to be used to convert from Jackson-bound intermediate type (source type of converter) into actual property type (which must be same as result type of converter).
    `java.lang.Class<?>` | `keyAs` Concrete type to deserialize keys of `Map` as, instead of type otherwise declared.
    `java.lang.Class<? extends KeyDeserializer>` | `keyUsing` Deserializer class to use for deserializing Map keys of annotated property.
    `java.lang.Class<? extends JsonDeserializer>` | `using` Deserializer class to use for deserializing associated value.

- - ### Element Detail

    - #### using

          public abstract java.lang.Class<? extends JsonDeserializer> using

      Deserializer class to use for deserializing associated value. Depending on what is annotated, value is either an instance of annotated class (used globablly anywhere where class deserializer is needed); or only used for deserializing property access via a setter method.
      Default:
        com.fasterxml.jackson.databind.JsonDeserializer.None.class

    - #### contentUsing

          public abstract java.lang.Class<? extends JsonDeserializer> contentUsing

      Deserializer class to use for deserializing contents (elements of a Collection/array, values of Maps) of annotated property. Can only be used on instances (methods, fields, constructors), and not value classes themselves.
      Default:
        com.fasterxml.jackson.databind.JsonDeserializer.None.class

    - #### keyUsing

          public abstract java.lang.Class<? extends KeyDeserializer> keyUsing

      Deserializer class to use for deserializing Map keys of annotated property. Can only be used on instances (methods, fields, constructors), and not value classes themselves.
      Default:
        com.fasterxml.jackson.databind.KeyDeserializer.None.class

    - #### builder

          public abstract java.lang.Class<?> builder

      Annotation for specifying if an external Builder class is to be used for building up deserialized instances of annotated class. If so, an instance of referenced class is first constructed (possibly using a Creator method; or if none defined, using default constructor), and its "with-methods" are used for populating fields; and finally "build-method" is invoked to complete deserialization.
      Default:
        java.lang.Void.class

    - #### converter

          public abstract java.lang.Class<? extends Converter> converter

      Which helper object (if any) is to be used to convert from Jackson-bound intermediate type (source type of converter) into actual property type (which must be same as result type of converter). This is often used for two-step deserialization; Jackson binds data into suitable intermediate type (like Tree representation), and converter then builds actual property type.
      Since:
        2.2
      Default:
        com.fasterxml.jackson.databind.util.Converter.None.class

    - #### contentConverter

          public abstract java.lang.Class<? extends Converter> contentConverter

      Similar to `converter()`, but used for values of structures types (List, arrays, Maps).
      Since:
        2.2
      Default:
        com.fasterxml.jackson.databind.util.Converter.None.class

    - #### as

          public abstract java.lang.Class<?> as

      Concrete type to deserialize values as, instead of type otherwise declared. Must be a subtype of declared type; otherwise an exception may be thrown by deserializer.

      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 specified deserializer, whereas this would only be used to locate the deserializer) and value of this annotation property is ignored.

      Default:
        java.lang.Void.class

    - #### keyAs

          public abstract java.lang.Class<?> keyAs

      Concrete type to deserialize keys of `Map` as, instead of type otherwise declared. Must be a subtype of declared type; otherwise an exception may be thrown by deserializer.
      Default:
        java.lang.Void.class

    - #### contentAs

          public abstract java.lang.Class<?> contentAs

      Concrete type to deserialize content (elements of a Collection/array, values of Maps) values as, instead of type otherwise declared. Must be a subtype of declared type; otherwise an exception may be thrown by deserializer.
      Default:
        java.lang.Void.class