org.springframework.http.converter.json

## Class JacksonObjectMapperFactoryBean

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

- All Implemented Interfaces:
    FactoryBean<ObjectMapper>, InitializingBean

      public class JacksonObjectMapperFactoryBean
      extends Object
      implements FactoryBean<ObjectMapper>, InitializingBean

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

  Example usage with MappingJacksonHttpMessageConverter:

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

  Example usage with MappingJacksonJsonView:

       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
              <property name="objectMapper">
                      <bean class="org.springframework.web.context.support.JacksonObjectMapperFactoryBean"
                              p:autoDetectFields="false"
                              p:autoDetectGettersSetters="false"
                              p:annotationIntrospector-ref="jaxbAnnotationIntrospector" />
              </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.JacksonObjectMapperFactoryBean">
              <property name="featuresToEnable">
                      <array>
                              <util:constant static-field="org.codehaus.jackson.map.SerializationConfig$Feature.WRAP_ROOT_VALUE"/>
                              <util:constant static-field="org.codehaus.jackson.map.SerializationConfig$Feature.CLOSE_CLOSEABLE"/>
                      </array>
              </property>
              <property name="featuresToDisable">
                      <array>
                              <util:constant static-field="org.codehaus.jackson.map.DeserializationConfig$Feature.USE_ANNOTATIONS"/>
                      </array>
              </property>
       </bean>

  Since:
    3.2
  Author:
    Dmitry Katsubo, Rossen Stoyanchev

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `JacksonObjectMapperFactoryBean()`

  - ### 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).
    `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(AnnotationIntrospector annotationIntrospector)` Set the `AnnotationIntrospector` for serialization and deserialization.
    `void` | `setAutoDetectFields(boolean autoDetectFields)` Shortcut for `SerializationConfig.Feature.AUTO_DETECT_FIELDS` and `DeserializationConfig.Feature.AUTO_DETECT_FIELDS`.
    `void` | `setAutoDetectGettersSetters(boolean autoDetectGettersSetters)` Shortcut for `SerializationConfig.Feature.AUTO_DETECT_GETTERS` and `DeserializationConfig.Feature.AUTO_DETECT_SETTERS`.
    `void` | `setDateFormat(DateFormat dateFormat)` Define the format for date/time with the given `DateFormat`.
    `void` | `setFailOnEmptyBeans(boolean failOnEmptyBeans)` Shortcut for `SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS`.
    `void` | `setFeaturesToDisable(Object[] featuresToDisable)` Specify features to disable.
    `void` | `setFeaturesToEnable(Object[] featuresToEnable)` Specify features to enable.
    `void` | `setIndentOutput(boolean indentOutput)` Shortcut for `SerializationConfig.Feature.INDENT_OUTPUT`.
    `void` | `setObjectMapper(ObjectMapper objectMapper)` Set the ObjectMapper instance to use.
    `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

    - #### JacksonObjectMapperFactoryBean

          public JacksonObjectMapperFactoryBean()

  - ### Method Detail

    - #### setObjectMapper

          public void setObjectMapper(ObjectMapper objectMapper)

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

    - #### setDateFormat

          public void setDateFormat(DateFormat dateFormat)

      Define the format for date/time with the given `DateFormat`.

      Note: Setting this property makes the exposed `ObjectMapper` non-thread-safe, according to Jackson's thread safety rules.

      See Also:
        `setSimpleDateFormat(String)`

    - #### setSimpleDateFormat

          public void setSimpleDateFormat(String format)

      Define the date/time format with a `SimpleDateFormat`.

      Note: Setting this property makes the exposed `ObjectMapper` non-thread-safe, according to Jackson's thread safety rules.

      See Also:
        `setDateFormat(DateFormat)`

    - #### setAnnotationIntrospector

          public void setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)

      Set the `AnnotationIntrospector` for serialization and deserialization.
      See Also:
        `SerializationConfig.setAnnotationIntrospector(AnnotationIntrospector)`, `DeserializationConfig.setAnnotationIntrospector(AnnotationIntrospector)`

    - #### setAutoDetectFields

          public void setAutoDetectFields(boolean autoDetectFields)

      Shortcut for `SerializationConfig.Feature.AUTO_DETECT_FIELDS` and `DeserializationConfig.Feature.AUTO_DETECT_FIELDS`.

    - #### setAutoDetectGettersSetters

          public void setAutoDetectGettersSetters(boolean autoDetectGettersSetters)

      Shortcut for `SerializationConfig.Feature.AUTO_DETECT_GETTERS` and `DeserializationConfig.Feature.AUTO_DETECT_SETTERS`.

    - #### setFailOnEmptyBeans

          public void setFailOnEmptyBeans(boolean failOnEmptyBeans)

      Shortcut for `SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS`.

    - #### setIndentOutput

          public void setIndentOutput(boolean indentOutput)

      Shortcut for `SerializationConfig.Feature.INDENT_OUTPUT`.

    - #### setFeaturesToEnable

          public void setFeaturesToEnable(Object[] featuresToEnable)

      Specify features to enable.
      See Also:
        `JsonParser.Feature`, `JsonGenerator.Feature`, `SerializationConfig.Feature`, `DeserializationConfig.Feature`

    - #### setFeaturesToDisable

          public void setFeaturesToDisable(Object[] featuresToDisable)

      Specify features to disable.
      See Also:
        `JsonParser.Feature`, `JsonGenerator.Feature`, `SerializationConfig.Feature`, `DeserializationConfig.Feature`

    - #### afterPropertiesSet

          public void afterPropertiesSet()

      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`

    - #### getObject

          public ObjectMapper getObject()

      Return the singleton ObjectMapper.
      Specified by:
        `getObject` in interface `FactoryBean<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<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<ObjectMapper>`
      Returns:
        whether the exposed object is a singleton
      See Also:
        `FactoryBean.getObject()`, `SmartFactoryBean.isPrototype()`