org.springframework.http.converter.json

## Class Jackson2ObjectMapperFactoryBean

- java.lang.Object
- - org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean

- All Implemented Interfaces:
    FactoryBean<com.fasterxml.jackson.databind.ObjectMapper>, InitializingBean

      public class Jackson2ObjectMapperFactoryBean
      extends Object
      implements FactoryBean<com.fasterxml.jackson.databind.ObjectMapper>, InitializingBean

  A FactoryBean for creating a Jackson `ObjectMapper` with setters to enable or disable Jackson features from within XML configuration.

  Example usage with `MappingJackson2HttpMessageConverter`:

       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
         <property name="objectMapper">
           <bean class="org.springframework.web.context.support.Jackson2ObjectMapperFactoryBean"
             p:autoDetectFields="false"
             p:autoDetectGettersSetters="false"
             p:annotationIntrospector-ref="jaxbAnnotationIntrospector" />
         </property>
       </bean>

  Example usage with `MappingJackson2JsonView`:

       <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
         <property name="objectMapper">
           <bean class="org.springframework.web.context.support.Jackson2ObjectMapperFactoryBean"
             p:failOnEmptyBeans="false"
             p:indentOutput="true">
             <property name="serializers">
               <array>
                 <bean class="org.mycompany.MyCustomSerializer" />
               </array>
             </property>
           </bean>
         </property>
       </bean>

  In case there are no specific setters provided (for some rarely used options), you can still use the more general methods `setFeaturesToEnable(Object[])` and `setFeaturesToDisable(Object[])`.

       <bean class="org.springframework.web.context.support.Jackson2ObjectMapperFactoryBean">
         <property name="featuresToEnable">
           <array>
             <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature$WRAP_ROOT_VALUE"/>
             <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature$CLOSE_CLOSEABLE"/>
           </array>
         </property>
         <property name="featuresToDisable">
           <array>
             <util:constant static-field="com.fasterxml.jackson.databind.MapperFeature$USE_ANNOTATIONS"/>
           </array>
         </property>
       </bean>

  Note: This BeanFctory is singleton, so if you need more than one you'll need to configure multiple instances.

  Since:
    3.2
  Author:
    Dmitry Katsubo, Rossen Stoyanchev

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `Jackson2ObjectMapperFactoryBean()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
    `com.fasterxml.jackson.databind.ObjectMapper` | `getObject()` Return the singleton ObjectMapper.
    `Class<?>` | `getObjectType()` Return the type of object that this FactoryBean creates, or `null` if not known in advance.
    `boolean` | `isSingleton()` Is the object managed by this factory a singleton? That is, will `FactoryBean.getObject()` always return the same object (a reference that can be cached)?
    `void` | `setAnnotationIntrospector(com.fasterxml.jackson.databind.AnnotationIntrospector annotationIntrospector)` Set the `AnnotationIntrospector` for both serialization and deserialization.
    `void` | `setAutoDetectFields(boolean autoDetectFields)` Shortcut for `MapperFeature.AUTO_DETECT_FIELDS` option.
    `void` | `setAutoDetectGettersSetters(boolean autoDetectGettersSetters)` Shortcut for `MapperFeature.AUTO_DETECT_SETTERS`/ `MapperFeature.AUTO_DETECT_GETTERS` option.
    `void` | `setDateFormat(DateFormat dateFormat)` Define the format for date/time with the given `DateFormat`.
    `void` | `setDeserializersByType(Map<Class<?>,com.fasterxml.jackson.databind.JsonDeserializer<?>> deserializers)` Configure custom deserializers for the given types.
    `void` | `setFailOnEmptyBeans(boolean failOnEmptyBeans)` Shortcut for `SerializationFeature.FAIL_ON_EMPTY_BEANS` option.
    `void` | `setFeaturesToDisable(Object... featuresToDisable)` Specify features to disable.
    `void` | `setFeaturesToEnable(Object... featuresToEnable)` Specify features to enable.
    `void` | `setIndentOutput(boolean indentOutput)` Shortcut for `SerializationFeature.INDENT_OUTPUT` option.
    `void` | `setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)` Set the ObjectMapper instance to use.
    `void` | `setSerializers(com.fasterxml.jackson.databind.JsonSerializer<?>... serializers)` Configure custom serializers.
    `void` | `setSerializersByType(Map<Class<?>,com.fasterxml.jackson.databind.JsonSerializer<?>> serializers)` Configure custom serializers for the given types.
    `void` | `setSimpleDateFormat(String format)` Define the date/time format with a `SimpleDateFormat`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### Jackson2ObjectMapperFactoryBean

          public Jackson2ObjectMapperFactoryBean()

  - ### Method Detail

    - #### setObjectMapper

          public void setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper objectMapper)

      Set the ObjectMapper instance to use. If not set, the ObjectMapper will be created using its default constructor.

    - #### setDateFormat

          public void setDateFormat(DateFormat dateFormat)

      Define the format for date/time with the given `DateFormat`.
      See Also:
        `setSimpleDateFormat(String)`

    - #### setSimpleDateFormat

          public void setSimpleDateFormat(String format)

      Define the date/time format with a `SimpleDateFormat`.
      See Also:
        `setDateFormat(DateFormat)`

    - #### setAnnotationIntrospector

          public void setAnnotationIntrospector(com.fasterxml.jackson.databind.AnnotationIntrospector annotationIntrospector)

      Set the `AnnotationIntrospector` for both serialization and deserialization.

    - #### setSerializers

          public void setSerializers(com.fasterxml.jackson.databind.JsonSerializer<?>... serializers)

      Configure custom serializers. Each serializer is registered for the type returned by `JsonSerializer.handledType()`, which must not be `null`.
      See Also:
        `setSerializersByType(Map)`

    - #### setSerializersByType

          public void setSerializersByType(Map<Class<?>,com.fasterxml.jackson.databind.JsonSerializer<?>> serializers)

      Configure custom serializers for the given types.
      See Also:
        `setSerializers(JsonSerializer...)`

    - #### setDeserializersByType

          public void setDeserializersByType(Map<Class<?>,com.fasterxml.jackson.databind.JsonDeserializer<?>> deserializers)

      Configure custom deserializers for the given types.

    - #### setAutoDetectFields

          public void setAutoDetectFields(boolean autoDetectFields)

      Shortcut for `MapperFeature.AUTO_DETECT_FIELDS` option.

    - #### setAutoDetectGettersSetters

          public void setAutoDetectGettersSetters(boolean autoDetectGettersSetters)

      Shortcut for `MapperFeature.AUTO_DETECT_SETTERS`/ `MapperFeature.AUTO_DETECT_GETTERS` option.

    - #### setFailOnEmptyBeans

          public void setFailOnEmptyBeans(boolean failOnEmptyBeans)

      Shortcut for `SerializationFeature.FAIL_ON_EMPTY_BEANS` option.

    - #### setIndentOutput

          public void setIndentOutput(boolean indentOutput)

      Shortcut for `SerializationFeature.INDENT_OUTPUT` option.

    - #### setFeaturesToEnable

          public void setFeaturesToEnable(Object... featuresToEnable)

      Specify features to enable.
      See Also:
        `MapperFeature`, `SerializationFeature`, `DeserializationFeature`, `JsonParser.Feature`, `JsonGenerator.Feature`

    - #### setFeaturesToDisable

          public void setFeaturesToDisable(Object... featuresToDisable)

      Specify features to disable.
      See Also:
        `MapperFeature`, `SerializationFeature`, `DeserializationFeature`, `JsonParser.Feature`, `JsonGenerator.Feature`

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws FatalBeanException

      Description copied from interface: `InitializingBean`
      Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

      This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`
      Throws:
        `FatalBeanException`

    - #### getObject

          public com.fasterxml.jackson.databind.ObjectMapper getObject()

      Return the singleton ObjectMapper.
      Specified by:
        `getObject` in interface `FactoryBean<com.fasterxml.jackson.databind.ObjectMapper>`
      Returns:
        an instance of the bean (can be `null`)
      See Also:
        `FactoryBeanNotInitializedException`

    - #### getObjectType

          public Class<?> getObjectType()

      Description copied from interface: `FactoryBean`
      Return the type of object that this FactoryBean creates, or `null` if not known in advance.

      This allows one to check for specific types of beans without instantiating objects, for example on autowiring.

      In the case of implementations that are creating a singleton object, this method should try to avoid singleton creation as far as possible; it should rather estimate the type in advance. For prototypes, returning a meaningful type here is advisable too.

      This method can be called before this FactoryBean has been fully initialized. It must not rely on state created during initialization; of course, it can still use such state if available.

      NOTE: Autowiring will simply ignore FactoryBeans that return `null` here. Therefore it is highly recommended to implement this method properly, using the current state of the FactoryBean.

      Specified by:
        `getObjectType` in interface `FactoryBean<com.fasterxml.jackson.databind.ObjectMapper>`
      Returns:
        the type of object that this FactoryBean creates, or `null` if not known at the time of the call
      See Also:
        `ListableBeanFactory.getBeansOfType(java.lang.Class<T>)`

    - #### isSingleton

          public boolean isSingleton()

      Description copied from interface: `FactoryBean`
      Is the object managed by this factory a singleton? That is, will `FactoryBean.getObject()` always return the same object (a reference that can be cached)?

      NOTE: If a FactoryBean indicates to hold a singleton object, the object returned from `getObject()` might get cached by the owning BeanFactory. Hence, do not return `true` unless the FactoryBean always exposes the same reference.

      The singleton status of the FactoryBean itself will generally be provided by the owning BeanFactory; usually, it has to be defined as singleton there.

      NOTE: This method returning `false` does not necessarily indicate that returned objects are independent instances. An implementation of the extended `SmartFactoryBean` interface may explicitly indicate independent instances through its `SmartFactoryBean.isPrototype()` method. Plain `FactoryBean` implementations which do not implement this extended interface are simply assumed to always return independent instances if the `isSingleton()` implementation returns `false`.

      Specified by:
        `isSingleton` in interface `FactoryBean<com.fasterxml.jackson.databind.ObjectMapper>`
      Returns:
        whether the exposed object is a singleton
      See Also:
        `FactoryBean.getObject()`, `SmartFactoryBean.isPrototype()`