com.fasterxml.jackson.databind

## Interface Module.SetupContext

- Enclosing class:
    Module

      public static interface Module.SetupContext

  Interface Jackson exposes to modules for purpose of registering extended functionality. Usually implemented by `ObjectMapper`, but modules should NOT rely on this -- if they do require access to mapper instance, they need to call `getOwner()` method.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addAbstractTypeResolver(AbstractTypeResolver resolver)` Method that module can use to register additional `AbstractTypeResolver` instance, to handle resolution of abstract to concrete types (either by defaulting, or by materializing).
    `void` | `addBeanDeserializerModifier(BeanDeserializerModifier mod)` Method that module can use to register additional modifier objects to customize configuration and construction of bean deserializers.
    `void` | `addBeanSerializerModifier(BeanSerializerModifier mod)` Method that module can use to register additional modifier objects to customize configuration and construction of bean serializers.
    `void` | `addDeserializationProblemHandler(DeserializationProblemHandler handler)` Add a deserialization problem handler
    `void` | `addDeserializers(Deserializers d)` Method that module can use to register additional deserializers to use for handling types.
    `void` | `addKeyDeserializers(KeyDeserializers s)` Method that module can use to register additional deserializers to use for handling Map key values (which are separate from value deserializers because they are always serialized from String values)
    `void` | `addKeySerializers(Serializers s)` Method that module can use to register additional serializers to use for handling Map key values (which are separate from value serializers because they must write `JsonToken.FIELD_NAME` instead of String value).
    `void` | `addSerializers(Serializers s)` Method that module can use to register additional serializers to use for handling types.
    `void` | `addTypeModifier(TypeModifier modifier)` Method that module can use to register additional `TypeModifier` instance, which can augment `JavaType` instances constructed by `TypeFactory`.
    `void` | `addValueInstantiators(ValueInstantiators instantiators)` Method that module can use to register additional `ValueInstantiator`s, by adding `ValueInstantiators` object that gets called when instantatiator is needed by a deserializer.
    `void` | `appendAnnotationIntrospector(AnnotationIntrospector ai)` Method for registering specified `AnnotationIntrospector` as the lowest priority introspector, chained with existing introspector(s) and called as fallback for cases not otherwise handled.
    `MutableConfigOverride` | `configOverride(java.lang.Class<?> type)` "Mutant accessor" for getting a mutable configuration override object for given type, needed to add or change per-type overrides applied to properties of given type.
    `com.fasterxml.jackson.core.Version` | `getMapperVersion()` Method that returns version information about `ObjectMapper` that implements this context.
    `<C extends com.fasterxml.jackson.core.ObjectCodec> C` | `getOwner()` Fallback access method that allows modules to refer to the `ObjectMapper` that provided this context.
    `TypeFactory` | `getTypeFactory()` Accessor for finding `TypeFactory` that is currently configured by the context.
    `void` | `insertAnnotationIntrospector(AnnotationIntrospector ai)` Method for registering specified `AnnotationIntrospector` as the highest priority introspector (will be chained with existing introspector(s) which will be used as fallbacks for cases this introspector does not handle)
    `boolean` | `isEnabled(DeserializationFeature f)`
    `boolean` | `isEnabled(com.fasterxml.jackson.core.JsonFactory.Feature f)`
    `boolean` | `isEnabled(com.fasterxml.jackson.core.JsonGenerator.Feature f)`
    `boolean` | `isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)`
    `boolean` | `isEnabled(MapperFeature f)`
    `boolean` | `isEnabled(SerializationFeature f)`
    `void` | `registerSubtypes(java.lang.Class<?>... subtypes)` Method for registering specified classes as subtypes (of supertype(s) they have)
    `void` | `registerSubtypes(NamedType... subtypes)` Method for registering specified classes as subtypes (of supertype(s) they have), using specified type names.
    `void` | `setClassIntrospector(ClassIntrospector ci)` Method for replacing the default class introspector with a derived class that overrides specific behavior.
    `void` | `setMixInAnnotations(java.lang.Class<?> target, java.lang.Class<?> mixinSource)` Method used for defining mix-in annotations to use for augmenting specified class or interface.
    `void` | `setNamingStrategy(PropertyNamingStrategy naming)` Method that may be used to override naming strategy that is used by `ObjectMapper`.

- - ### Method Detail

    - #### getMapperVersion

          com.fasterxml.jackson.core.Version getMapperVersion()

      Method that returns version information about `ObjectMapper` that implements this context. Modules can use this to choose different settings or initialization order; or even decide to fail set up completely if version is compatible with module.

    - #### getOwner

          <C extends com.fasterxml.jackson.core.ObjectCodec> C getOwner()

      Fallback access method that allows modules to refer to the `ObjectMapper` that provided this context. It should NOT be needed by most modules; and ideally should not be used -- however, there may be cases where this may be necessary due to various design constraints.

      NOTE: use of this method is discouraged, as it allows access to things Modules typically should not modify. It is included, however, to allow access to new features in cases where Module API has not yet been extended, or there are oversights.

      Return value is chosen to not leak dependency to `ObjectMapper`; however, instance will always be of that type. This is why return value is declared generic, to allow caller to specify context to often avoid casting.

      Since:
        2.0

    - #### getTypeFactory

          TypeFactory getTypeFactory()

      Accessor for finding `TypeFactory` that is currently configured by the context.

      NOTE: since it is possible that other modules might change or replace TypeFactory, use of this method adds order-dependency for registrations.

      Since:
        2.0

    - #### isEnabled

          boolean isEnabled(MapperFeature f)

    - #### isEnabled

          boolean isEnabled(DeserializationFeature f)

    - #### isEnabled

          boolean isEnabled(SerializationFeature f)

    - #### isEnabled

          boolean isEnabled(com.fasterxml.jackson.core.JsonFactory.Feature f)

    - #### isEnabled

          boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)

    - #### isEnabled

          boolean isEnabled(com.fasterxml.jackson.core.JsonGenerator.Feature f)

    - #### configOverride

          MutableConfigOverride configOverride(java.lang.Class<?> type)

      "Mutant accessor" for getting a mutable configuration override object for given type, needed to add or change per-type overrides applied to properties of given type. Usage is through returned object by colling "setter" methods, which directly modify override object and take effect directly. For example you can do

             mapper.configOverride(java.util.Date.class)
                 .setFormat(JsonFormat.Value.forPattern("yyyy-MM-dd"));

           to change the default format to use for properties of type
           Date (possibly further overridden by per-property
           annotations)

      Since:
        2.8

    - #### addDeserializers

          void addDeserializers(Deserializers d)

      Method that module can use to register additional deserializers to use for handling types.
      Parameters:
        `d` - Object that can be called to find deserializer for types supported by module (null returned for non-supported types)

    - #### addKeyDeserializers

          void addKeyDeserializers(KeyDeserializers s)

      Method that module can use to register additional deserializers to use for handling Map key values (which are separate from value deserializers because they are always serialized from String values)

    - #### addSerializers

          void addSerializers(Serializers s)

      Method that module can use to register additional serializers to use for handling types.
      Parameters:
        `s` - Object that can be called to find serializer for types supported by module (null returned for non-supported types)

    - #### addKeySerializers

          void addKeySerializers(Serializers s)

      Method that module can use to register additional serializers to use for handling Map key values (which are separate from value serializers because they must write `JsonToken.FIELD_NAME` instead of String value).

    - #### addBeanDeserializerModifier

          void addBeanDeserializerModifier(BeanDeserializerModifier mod)

      Method that module can use to register additional modifier objects to customize configuration and construction of bean deserializers.
      Parameters:
        `mod` - Modifier to register

    - #### addBeanSerializerModifier

          void addBeanSerializerModifier(BeanSerializerModifier mod)

      Method that module can use to register additional modifier objects to customize configuration and construction of bean serializers.
      Parameters:
        `mod` - Modifier to register

    - #### addAbstractTypeResolver

          void addAbstractTypeResolver(AbstractTypeResolver resolver)

      Method that module can use to register additional `AbstractTypeResolver` instance, to handle resolution of abstract to concrete types (either by defaulting, or by materializing).
      Parameters:
        `resolver` - Resolver to add.

    - #### addTypeModifier

          void addTypeModifier(TypeModifier modifier)

      Method that module can use to register additional `TypeModifier` instance, which can augment `JavaType` instances constructed by `TypeFactory`.
      Parameters:
        `modifier` - to add

    - #### addValueInstantiators

          void addValueInstantiators(ValueInstantiators instantiators)

      Method that module can use to register additional `ValueInstantiator`s, by adding `ValueInstantiators` object that gets called when instantatiator is needed by a deserializer.
      Parameters:
        `instantiators` - Object that can provide `ValueInstantiator`s for constructing POJO values during deserialization

    - #### setClassIntrospector

          void setClassIntrospector(ClassIntrospector ci)

      Method for replacing the default class introspector with a derived class that overrides specific behavior.
      Parameters:
        `ci` - Derived class of ClassIntrospector with overriden behavior
      Since:
        2.2

    - #### insertAnnotationIntrospector

          void insertAnnotationIntrospector(AnnotationIntrospector ai)

      Method for registering specified `AnnotationIntrospector` as the highest priority introspector (will be chained with existing introspector(s) which will be used as fallbacks for cases this introspector does not handle)
      Parameters:
        `ai` - Annotation introspector to register.

    - #### appendAnnotationIntrospector

          void appendAnnotationIntrospector(AnnotationIntrospector ai)

      Method for registering specified `AnnotationIntrospector` as the lowest priority introspector, chained with existing introspector(s) and called as fallback for cases not otherwise handled.
      Parameters:
        `ai` - Annotation introspector to register.

    - #### registerSubtypes

          void registerSubtypes(java.lang.Class<?>... subtypes)

      Method for registering specified classes as subtypes (of supertype(s) they have)

    - #### registerSubtypes

          void registerSubtypes(NamedType... subtypes)

      Method for registering specified classes as subtypes (of supertype(s) they have), using specified type names.

    - #### setMixInAnnotations

          void setMixInAnnotations(java.lang.Class<?> target,
                                 java.lang.Class<?> mixinSource)

      Method used for defining mix-in annotations to use for augmenting specified class or interface. All annotations from `mixinSource` are taken to override annotations that `target` (or its supertypes) has.

      Note: mix-ins are registered both for serialization and deserialization (which can be different internally).

      Note: currently only one set of mix-in annotations can be defined for a single class; so if multiple modules register mix-ins, highest priority one (last one registered) will have priority over other modules.

      Parameters:
        `target` - Class (or interface) whose annotations to effectively override
        `mixinSource` - Class (or interface) whose annotations are to be "added" to target's annotations, overriding as necessary

    - #### addDeserializationProblemHandler

          void addDeserializationProblemHandler(DeserializationProblemHandler handler)

      Add a deserialization problem handler
      Parameters:
        `handler` - The deserialization problem handler

    - #### setNamingStrategy

          void setNamingStrategy(PropertyNamingStrategy naming)

      Method that may be used to override naming strategy that is used by `ObjectMapper`.
      Since:
        2.3