public class Jackson2ObjectMapperFactoryBean extends Object implements org.springframework.beans.factory.FactoryBean<ObjectMapper>, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.InitializingBean
FactoryBean
for creating a Jackson 2.x 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.http.converter.json.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.http.converter.json.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(java.lang.Object...)
and
setFeaturesToDisable(java.lang.Object...)
.
<bean class="org.springframework.http.converter.json.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>
In case you want to configure Jackson's ObjectMapper
with a custom Module
,
you can register one or more such Modules by class name via setModulesToInstall(java.lang.Class<? extends com.fasterxml.jackson.databind.Module>...)
:
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="modulesToInstall" value="myapp.jackson.MySampleModule,myapp.jackson.MyOtherModule"/> </beanNote that Jackson's JSR-310 and Joda-Time support modules will be registered automatically when available (and when Java 8 and Joda-Time themselves are available, respectively).
Tested against Jackson 2.2 and 2.3; compatible with Jackson 2.0 and higher.
Constructor and Description |
---|
Jackson2ObjectMapperFactoryBean() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet() |
ObjectMapper |
getObject()
Return the singleton ObjectMapper.
|
Class<?> |
getObjectType() |
boolean |
isSingleton() |
void |
setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)
Set an
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 |
setBeanClassLoader(ClassLoader beanClassLoader) |
void |
setDateFormat(DateFormat dateFormat)
Define the format for date/time with the given
DateFormat . |
void |
setDeserializersByType(Map<Class<?>,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 |
setFindModulesViaServiceLoader(boolean findModules)
Set whether to let Jackson find available modules via the JDK ServiceLoader,
based on META-INF metadata in the classpath.
|
void |
setIndentOutput(boolean indentOutput)
Shortcut for
SerializationFeature.INDENT_OUTPUT option. |
void |
setModules(List<Module> modules)
Set a complete list of modules to be registered with the
ObjectMapper . |
void |
setModulesToInstall(Class<? extends Module>... modules)
Specify one or more modules by class (or class name in XML),
to be registered with the
ObjectMapper . |
void |
setObjectMapper(ObjectMapper objectMapper)
Set the ObjectMapper instance to use.
|
void |
setPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy)
Specify a
PropertyNamingStrategy to
configure the ObjectMapper with. |
void |
setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion)
Set a custom inclusion strategy for serialization.
|
void |
setSerializers(JsonSerializer<?>... serializers)
Configure custom serializers.
|
void |
setSerializersByType(Map<Class<?>,JsonSerializer<?>> serializers)
Configure custom serializers for the given types.
|
void |
setSimpleDateFormat(String format)
Define the date/time format with a
SimpleDateFormat . |
public void setObjectMapper(ObjectMapper objectMapper)
public void setDateFormat(DateFormat dateFormat)
DateFormat
.
Note: Setting this property makes the exposed ObjectMapper
non-thread-safe, according to Jackson's thread safety rules.
setSimpleDateFormat(String)
public void setSimpleDateFormat(String format)
SimpleDateFormat
.
Note: Setting this property makes the exposed ObjectMapper
non-thread-safe, according to Jackson's thread safety rules.
setDateFormat(DateFormat)
public void setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)
AnnotationIntrospector
for both serialization and deserialization.public void setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion)
JsonInclude.Include
public void setSerializers(JsonSerializer<?>... serializers)
JsonSerializer.handledType()
, which must not be
null
.setSerializersByType(Map)
public void setSerializersByType(Map<Class<?>,JsonSerializer<?>> serializers)
setSerializers(JsonSerializer...)
public void setDeserializersByType(Map<Class<?>,JsonDeserializer<?>> deserializers)
public void setAutoDetectFields(boolean autoDetectFields)
MapperFeature.AUTO_DETECT_FIELDS
option.public void setAutoDetectGettersSetters(boolean autoDetectGettersSetters)
MapperFeature.AUTO_DETECT_SETTERS
/
MapperFeature.AUTO_DETECT_GETTERS
option.public void setFailOnEmptyBeans(boolean failOnEmptyBeans)
SerializationFeature.FAIL_ON_EMPTY_BEANS
option.public void setIndentOutput(boolean indentOutput)
SerializationFeature.INDENT_OUTPUT
option.public void setFeaturesToEnable(Object... featuresToEnable)
public void setFeaturesToDisable(Object... featuresToDisable)
public void setModules(List<Module> modules)
ObjectMapper
.
Note: If this is set, no finding of modules is going to happen - not by
Jackson, and not by Spring either (see setFindModulesViaServiceLoader(boolean)
).
As a consequence, specifying an empty list here will suppress any kind of
module detection.
Specify either this or setModulesToInstall(java.lang.Class<? extends com.fasterxml.jackson.databind.Module>...)
, not both.
Module
public void setModulesToInstall(Class<? extends Module>... modules)
ObjectMapper
.
Modules specified here will be registered in combination with
Spring's autodetection of JSR-310 and Joda-Time, or Jackson's
finding of modules (see setFindModulesViaServiceLoader(boolean)
).
Specify either this or setModules(java.util.List<com.fasterxml.jackson.databind.Module>)
, not both.
Module
public void setFindModulesViaServiceLoader(boolean findModules)
If this mode is not set, Spring's Jackson2ObjectMapperFactoryBean itself will try to find the JSR-310 and Joda-Time support modules on the classpath - provided that Java 8 and Joda-Time themselves are available, respectively.
ObjectMapper.findModules()
public void setPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy)
PropertyNamingStrategy
to
configure the ObjectMapper
with.public void setBeanClassLoader(ClassLoader beanClassLoader)
setBeanClassLoader
in interface org.springframework.beans.factory.BeanClassLoaderAware
public void afterPropertiesSet()
afterPropertiesSet
in interface org.springframework.beans.factory.InitializingBean
public ObjectMapper getObject()
getObject
in interface org.springframework.beans.factory.FactoryBean<ObjectMapper>
public Class<?> getObjectType()
getObjectType
in interface org.springframework.beans.factory.FactoryBean<ObjectMapper>
public boolean isSingleton()
isSingleton
in interface org.springframework.beans.factory.FactoryBean<ObjectMapper>