Class Jackson2ObjectMapperFactoryBean
- java.lang.Object
- org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean
- All Implemented Interfaces:
Aware,BeanClassLoaderAware,FactoryBean<ObjectMapper>,InitializingBean,ApplicationContextAware
public class Jackson2ObjectMapperFactoryBean extends Object implements FactoryBean<ObjectMapper>, BeanClassLoaderAware, ApplicationContextAware, InitializingBean
AFactoryBeanfor creating a Jackson 2.xObjectMapper(default) orXmlMapper(createXmlMapperproperty set to true) with setters to enable or disable Jackson features from within XML configuration.It customizes Jackson defaults properties with the following ones:
MapperFeature.DEFAULT_VIEW_INCLUSIONis disabledDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESis disabled
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...)andsetFeaturesToDisable(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>It also automatically registers the following well-known modules if they are detected on the classpath:
- jackson-datatype-jdk7: support for Java 7 types like
Path - jackson-datatype-jdk8: support for other Java 8 types like
Optional - jackson-datatype-jsr310: support for Java 8 Date & Time API types
- jackson-datatype-joda: support for Joda-Time types
- jackson-module-kotlin: support for Kotlin classes and data classes
In case you want to configure Jackson's
ObjectMapperwith a customModule, you can register one or more such Modules by class name viasetModulesToInstall(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"/> </bean
Compatible with Jackson 2.6 and higher, as of Spring 4.3.
- Since:
- 3.2
- Author:
- Dmitry Katsubo, Rossen Stoyanchev, Brian Clozel, Juergen Hoeller, Tadaya Tsuyukubo, Sebastien Deleuze
Constructor Summary
Constructors Constructor Description Jackson2ObjectMapperFactoryBean()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()Invoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.ObjectMappergetObject()Return the singleton ObjectMapper.Class<?>getObjectType()Return the type of object that this FactoryBean creates, ornullif not known in advance.booleanisSingleton()Is the object managed by this factory a singleton? That is, willFactoryBean.getObject()always return the same object (a reference that can be cached)?voidsetAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)Set anAnnotationIntrospectorfor both serialization and deserialization.voidsetApplicationContext(ApplicationContext applicationContext)Set the builderApplicationContextin order to autowire Jackson handlers (JsonSerializer,JsonDeserializer,KeyDeserializer,TypeResolverBuilderandTypeIdResolver).voidsetAutoDetectFields(boolean autoDetectFields)Shortcut forMapperFeature.AUTO_DETECT_FIELDSoption.voidsetAutoDetectGettersSetters(boolean autoDetectGettersSetters)voidsetBeanClassLoader(ClassLoader beanClassLoader)Callback that supplies the beanclass loaderto a bean instance.voidsetCreateXmlMapper(boolean createXmlMapper)If set to true and no customObjectMapperhas been set, aXmlMapperwill be created using its default constructor.voidsetDateFormat(DateFormat dateFormat)Define the format for date/time with the givenDateFormat.voidsetDefaultTyping(TypeResolverBuilder<?> typeResolverBuilder)Specify aTypeResolverBuilderto use for Jackson's default typing.voidsetDefaultUseWrapper(boolean defaultUseWrapper)Define if a wrapper will be used for indexed (List, array) properties or not by default (only applies toXmlMapper).voidsetDefaultViewInclusion(boolean defaultViewInclusion)Shortcut forMapperFeature.DEFAULT_VIEW_INCLUSIONoption.voidsetDeserializers(JsonDeserializer<?>... deserializers)Configure custom deserializers.voidsetDeserializersByType(Map<Class<?>,JsonDeserializer<?>> deserializers)Configure custom deserializers for the given types.voidsetFailOnEmptyBeans(boolean failOnEmptyBeans)Shortcut forSerializationFeature.FAIL_ON_EMPTY_BEANSoption.voidsetFailOnUnknownProperties(boolean failOnUnknownProperties)Shortcut forDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESoption.voidsetFeaturesToDisable(Object... featuresToDisable)Specify features to disable.voidsetFeaturesToEnable(Object... featuresToEnable)Specify features to enable.voidsetFilters(FilterProvider filters)Set the global filters to use in order to support@JsonFilterannotated POJO.voidsetFindModulesViaServiceLoader(boolean findModules)Set whether to let Jackson find available modules via the JDK ServiceLoader, based on META-INF metadata in the classpath.voidsetHandlerInstantiator(HandlerInstantiator handlerInstantiator)Customize the construction of Jackson handlers (JsonSerializer,JsonDeserializer,KeyDeserializer,TypeResolverBuilderandTypeIdResolver).voidsetIndentOutput(boolean indentOutput)Shortcut forSerializationFeature.INDENT_OUTPUToption.voidsetLocale(Locale locale)Override the defaultLocaleto use for formatting.voidsetMixIns(Map<Class<?>,Class<?>> mixIns)Add mix-in annotations to use for augmenting specified class or interface.voidsetModules(List<Module> modules)Set a complete list of modules to be registered with theObjectMapper.voidsetModulesToInstall(Class<? extends Module>... modules)Specify one or more modules by class (or class name in XML) to be registered with theObjectMapper.voidsetObjectMapper(ObjectMapper objectMapper)Set theObjectMapperinstance to use.voidsetPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy)Specify aPropertyNamingStrategyto configure theObjectMapperwith.voidsetSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion)Set a custom inclusion strategy for serialization.voidsetSerializers(JsonSerializer<?>... serializers)Configure custom serializers.voidsetSerializersByType(Map<Class<?>,JsonSerializer<?>> serializers)Configure custom serializers for the given types.voidsetSimpleDateFormat(String format)Define the date/time format with aSimpleDateFormat.voidsetTimeZone(TimeZone timeZone)Override the defaultTimeZoneto use for formatting.
Constructor Detail
Jackson2ObjectMapperFactoryBean
public Jackson2ObjectMapperFactoryBean()
Method Detail
setObjectMapper
public void setObjectMapper(ObjectMapper objectMapper)
Set theObjectMapperinstance to use. If not set, theObjectMapperwill be created using its default constructor.
setCreateXmlMapper
public void setCreateXmlMapper(boolean createXmlMapper)
If set to true and no customObjectMapperhas been set, aXmlMapperwill be created using its default constructor.- Since:
- 4.1
setDateFormat
public void setDateFormat(DateFormat dateFormat)
Define the format for date/time with the givenDateFormat.Note: Setting this property makes the exposed
ObjectMappernon-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 aSimpleDateFormat.Note: Setting this property makes the exposed
ObjectMappernon-thread-safe, according to Jackson's thread safety rules.- See Also:
setDateFormat(DateFormat)
setLocale
public void setLocale(Locale locale)
Override the defaultLocaleto use for formatting. Default value used isLocale.getDefault().- Since:
- 4.1.5
setTimeZone
public void setTimeZone(TimeZone timeZone)
Override the defaultTimeZoneto use for formatting. Default value used is UTC (NOT local timezone).- Since:
- 4.1.5
setAnnotationIntrospector
public void setAnnotationIntrospector(AnnotationIntrospector annotationIntrospector)
Set anAnnotationIntrospectorfor both serialization and deserialization.
setPropertyNamingStrategy
public void setPropertyNamingStrategy(PropertyNamingStrategy propertyNamingStrategy)
Specify aPropertyNamingStrategyto configure theObjectMapperwith.- Since:
- 4.0.2
setDefaultTyping
public void setDefaultTyping(TypeResolverBuilder<?> typeResolverBuilder)
Specify aTypeResolverBuilderto use for Jackson's default typing.- Since:
- 4.2.2
setSerializationInclusion
public void setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include serializationInclusion)
Set a custom inclusion strategy for serialization.- See Also:
JsonInclude.Include
setFilters
public void setFilters(FilterProvider filters)
Set the global filters to use in order to support@JsonFilterannotated POJO.- Since:
- 4.2
- See Also:
Jackson2ObjectMapperBuilder.filters(FilterProvider)
setMixIns
public void setMixIns(Map<Class<?>,Class<?>> mixIns)
Add mix-in annotations to use for augmenting specified class or interface.- Parameters:
mixIns- Map of entries with target classes (or interface) whose annotations to effectively override as key and mix-in classes (or interface) whose annotations are to be "added" to target's annotations as value.- Since:
- 4.1.2
- See Also:
ObjectMapper.addMixInAnnotations(Class, Class)
setSerializers
public void setSerializers(JsonSerializer<?>... serializers)
Configure custom serializers. Each serializer is registered for the type returned byJsonSerializer.handledType(), which must not benull.- See Also:
setSerializersByType(Map)
setSerializersByType
public void setSerializersByType(Map<Class<?>,JsonSerializer<?>> serializers)
Configure custom serializers for the given types.- See Also:
setSerializers(JsonSerializer...)
setDeserializers
public void setDeserializers(JsonDeserializer<?>... deserializers)
Configure custom deserializers. Each deserializer is registered for the type returned byJsonDeserializer.handledType(), which must not benull.- Since:
- 4.3
- See Also:
setDeserializersByType(Map)
setDeserializersByType
public void setDeserializersByType(Map<Class<?>,JsonDeserializer<?>> deserializers)
Configure custom deserializers for the given types.
setAutoDetectFields
public void setAutoDetectFields(boolean autoDetectFields)
Shortcut forMapperFeature.AUTO_DETECT_FIELDSoption.
setAutoDetectGettersSetters
public void setAutoDetectGettersSetters(boolean autoDetectGettersSetters)
setDefaultViewInclusion
public void setDefaultViewInclusion(boolean defaultViewInclusion)
Shortcut forMapperFeature.DEFAULT_VIEW_INCLUSIONoption.- Since:
- 4.1
setFailOnUnknownProperties
public void setFailOnUnknownProperties(boolean failOnUnknownProperties)
Shortcut forDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESoption.- Since:
- 4.1.1
setFailOnEmptyBeans
public void setFailOnEmptyBeans(boolean failOnEmptyBeans)
Shortcut forSerializationFeature.FAIL_ON_EMPTY_BEANSoption.
setIndentOutput
public void setIndentOutput(boolean indentOutput)
Shortcut forSerializationFeature.INDENT_OUTPUToption.
setDefaultUseWrapper
public void setDefaultUseWrapper(boolean defaultUseWrapper)
Define if a wrapper will be used for indexed (List, array) properties or not by default (only applies toXmlMapper).- Since:
- 4.3
setFeaturesToEnable
public void setFeaturesToEnable(Object... featuresToEnable)
Specify features to enable.
setFeaturesToDisable
public void setFeaturesToDisable(Object... featuresToDisable)
Specify features to disable.
setModules
public void setModules(List<Module> modules)
Set a complete list of modules to be registered with theObjectMapper.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.- Since:
- 4.0
- See Also:
Module
setModulesToInstall
public void setModulesToInstall(Class<? extends Module>... modules)
Specify one or more modules by class (or class name in XML) to be registered with theObjectMapper.Modules specified here will be registered after Spring's autodetection of JSR-310 and Joda-Time, or Jackson's finding of modules (see
setFindModulesViaServiceLoader(boolean)), allowing to eventually override their configuration.Specify either this or
setModules(java.util.List<com.fasterxml.jackson.databind.Module>), not both.- Since:
- 4.0.1
- See Also:
Module
setFindModulesViaServiceLoader
public void setFindModulesViaServiceLoader(boolean findModules)
Set whether to let Jackson find available modules via the JDK ServiceLoader, based on META-INF metadata in the classpath. Requires Jackson 2.2 or higher.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.
- Since:
- 4.0.1
- See Also:
ObjectMapper.findModules()
setBeanClassLoader
public void setBeanClassLoader(ClassLoader beanClassLoader)
Description copied from interface:BeanClassLoaderAwareCallback that supplies the beanclass loaderto a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean'sInitializingBean.afterPropertiesSet()method or a custom init-method.- Specified by:
setBeanClassLoaderin interfaceBeanClassLoaderAware- Parameters:
beanClassLoader- the owning class loader; may benullin which case a defaultClassLoadermust be used, for example theClassLoaderobtained viaClassUtils.getDefaultClassLoader()
setHandlerInstantiator
public void setHandlerInstantiator(HandlerInstantiator handlerInstantiator)
Customize the construction of Jackson handlers (JsonSerializer,JsonDeserializer,KeyDeserializer,TypeResolverBuilderandTypeIdResolver).- Since:
- 4.1.3
- See Also:
setApplicationContext(ApplicationContext)
setApplicationContext
public void setApplicationContext(ApplicationContext applicationContext)
Set the builderApplicationContextin order to autowire Jackson handlers (JsonSerializer,JsonDeserializer,KeyDeserializer,TypeResolverBuilderandTypeIdResolver).- Specified by:
setApplicationContextin interfaceApplicationContextAware- Parameters:
applicationContext- the ApplicationContext object to be used by this object- Since:
- 4.1.3
- See Also:
Jackson2ObjectMapperBuilder.applicationContext(ApplicationContext),SpringHandlerInstantiator
afterPropertiesSet
public void afterPropertiesSet()
Description copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSetin interfaceInitializingBean
getObject
public ObjectMapper getObject()
Return the singleton ObjectMapper.- Specified by:
getObjectin interfaceFactoryBean<ObjectMapper>- Returns:
- an instance of the bean (can be
null) - See Also:
FactoryBeanNotInitializedException
getObjectType
public Class<?> getObjectType()
Description copied from interface:FactoryBeanReturn the type of object that this FactoryBean creates, ornullif 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
nullhere. Therefore it is highly recommended to implement this method properly, using the current state of the FactoryBean.- Specified by:
getObjectTypein interfaceFactoryBean<ObjectMapper>- Returns:
- the type of object that this FactoryBean creates, or
nullif not known at the time of the call - See Also:
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
isSingleton
public boolean isSingleton()
Description copied from interface:FactoryBeanIs the object managed by this factory a singleton? That is, willFactoryBean.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 returntrueunless 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
falsedoes not necessarily indicate that returned objects are independent instances. An implementation of the extendedSmartFactoryBeaninterface may explicitly indicate independent instances through itsSmartFactoryBean.isPrototype()method. PlainFactoryBeanimplementations which do not implement this extended interface are simply assumed to always return independent instances if theisSingleton()implementation returnsfalse.- Specified by:
isSingletonin interfaceFactoryBean<ObjectMapper>- Returns:
- whether the exposed object is a singleton
- See Also:
FactoryBean.getObject(),SmartFactoryBean.isPrototype()