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
`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()`