Class MapperConfig<T extends MapperConfig<T>>
- All Implemented Interfaces:
ClassIntrospector.MixInResolver
- Direct Known Subclasses:
DeserializationConfig, SerializationConfig
As of version 1.9, the goal is to make this class eventually immutable. Because of this, existing methods that allow changing state of this instance are deprecated in favor of methods that create new instances with different configuration ("fluent factories"). One major remaining issue is that of handling mix-in annotations, which still represent a bit of mutable state; may need to implement a functional-style immutable map for storing those.
- Since:
- 1.2 -- major change in 1.8, changed from interface to abstract class
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classImmutable container class used to store simple configuration settings.static interfaceInterface that actual Feature enumerations used byMapperConfigimplementations must implement. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected MapperConfig.BaseImmutable container object for simple configuration settings.Mapping that defines how to apply mix-in annotations: key is the type to received additional annotations, and value is the type that has annotations to "mix in".protected booleanFlag used to detect when a copy if mix-in annotations is needed: set when current copy is shared, cleared when a fresh copy is madeprotected SubtypeResolverRegistered concrete subtypes that can be used instead of (or in addition to) ones declared using annotations.protected static final DateFormatThis is the defaultDateFormatused unless overridden by custom implementation. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedMapperConfig(ClassIntrospector<? extends BeanDescription> ci, AnnotationIntrospector ai, VisibilityChecker<?> vc, SubtypeResolver str, PropertyNamingStrategy pns, TypeFactory tf, HandlerInstantiator hi) protectedMapperConfig(MapperConfig<T> src) Simple copy constructorprotectedMapperConfig(MapperConfig<T> src, MapperConfig.Base base, SubtypeResolver str) -
Method Summary
Modifier and TypeMethodDescriptionfinal voidaddMixInAnnotations(Class<?> target, Class<?> mixinSource) Method to use for adding mix-in annotations to use for augmenting specified class or interface.final voidappendAnnotationIntrospector(AnnotationIntrospector introspector) Deprecated.abstract booleanAccessor for determining whether it is ok to try to force override of access modifiers to be able to get or set values of non-public Methods, Fields; to invoke non-public Constructors, Methods; or to instantiate non-public Classes.constructSpecializedType(JavaType baseType, Class<?> subclass) final JavaTypeconstructType(Class<?> cls) Helper method that will constructJavaTypefor given raw class.final JavaTypeconstructType(TypeReference<?> valueTypeRef) Helper method that will constructJavaTypefor given type reference This is a simple short-cut for:abstract TcreateUnshared(SubtypeResolver subtypeResolver) Method to use for constructing an instance that is not shared between multiple operations but only used for a single one (which may be this instance, if it is immutable; if not, a copy is constructed with same settings)final Class<?> findMixInClassFor(Class<?> cls) Method that will check if there are "mix-in" classes (with mix-in annotations) for given classabstract voidfromAnnotations(Class<?> cls) Deprecated.Since 1.9, it is preferably to explicitly configure instances; this method also modifies existing instance which is against immutable design goals of this class.Method for gettingAnnotationIntrospectorconfigured to introspect annotation values used for configuration.ClassIntrospector<? extends BeanDescription> final DateFormatMethod for accessing currently configured (textual) date format that will be used for reading or writing date values (in case of writing, only if textual output is configured; not if dates are to be serialized as time stamps).final TypeResolverBuilder<?> getDefaultTyper(JavaType baseType) Method called to locate a type info handler for types that do not have one explicitly declared via annotations (or other configuration).Accessor for object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers).final HandlerInstantiatorfinal PropertyNamingStrategyfinal SubtypeResolverAccessor for object used for finding out all reachable subtypes for supertypes; needed when a logical type name is used instead of class name (or custom scheme).final TypeFactoryfinal voidinsertAnnotationIntrospector(AnnotationIntrospector introspector) Deprecated.Since 1.9 usewithInsertedAnnotationIntrospector(AnnotationIntrospector)instead; this method is deprecated as it changes state, preventing immutability of instances<DESC extends BeanDescription>
DESCintrospectClassAnnotations(Class<?> cls) Accessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.abstract <DESC extends BeanDescription>
DESCAccessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.<DESC extends BeanDescription>
DESCAccessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types.abstract <DESC extends BeanDescription>
DESCAccessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types.abstract booleanMethod for determining whether annotation processing is enabled or not (default settings are typically that it is enabled; must explicitly disable).abstract booleanMethod for checking whether given feature is enabled or notfinal intfinal voidDeprecated.Since 1.8, use eitherwithAnnotationIntrospector(AnnotationIntrospector)or Module API insteadvoidDeprecated.As of version 1.8, it is preferable to call method inObjectMapperinstead; or construct new instance withwithDateFormat(DateFormat)final voidsetMixInAnnotations(Map<Class<?>, Class<?>> sourceMixins) Method to use for defining mix-in annotations to use for augmenting annotations that processable (serializable / deserializable) classes have.abstract booleanAccessor for checking whether default settings for property handling indicate that properties should be alphabetically ordered or not.typeIdResolverInstance(Annotated annotated, Class<? extends TypeIdResolver> resolverClass) Method that can be called to obtain an instance ofTypeIdResolverof specified type.typeResolverBuilderInstance(Annotated annotated, Class<? extends TypeResolverBuilder<?>> builderClass) Method that can be called to obtain an instance ofTypeIdResolverof specified type.abstract TMethod for constructing and returning a new instance with differentAnnotationIntrospectorto use (replacing old one).abstract TwithAppendedAnnotationIntrospector(AnnotationIntrospector introspector) Method for constructing and returning a new instance with additionalAnnotationIntrospectorappended (as the lowest priority one)abstract TwithClassIntrospector(ClassIntrospector<? extends BeanDescription> ci) Method for constructing and returning a new instance with differentClassIntrospectorto use.abstract TMethod for constructing and returning a new instance with differentDateFormatto use.abstract TMethod for constructing and returning a new instance with differentHandlerInstantiatorto use.abstract TwithInsertedAnnotationIntrospector(AnnotationIntrospector introspector) Method for constructing and returning a new instance with additionalAnnotationIntrospectorinserted (as the highest priority one)abstract TMethod for constructing and returning a new instance with differentPropertyNamingStrategyto use.abstract TMethod for constructing and returning a new instance with differentSubtypeResolverto use.abstract TwithTypeFactory(TypeFactory typeFactory) Method for constructing and returning a new instance with differentTypeFactoryto use.abstract TMethod for constructing and returning a new instance with differentTypeResolverBuilderto use.abstract TwithVisibility(JsonMethod forMethod, JsonAutoDetect.Visibility visibility) Method for constructing and returning a new instance with different minimal visibility level for specified property typeabstract TMethod for constructing and returning a new instance with differentVisibilityCheckerto use.
-
Field Details
-
DEFAULT_DATE_FORMAT
This is the defaultDateFormatused unless overridden by custom implementation. -
_base
Immutable container object for simple configuration settings.Note: ideally this would be final, but until we can eliminate mutators, must keep it mutable.
-
_mixInAnnotations
Mapping that defines how to apply mix-in annotations: key is the type to received additional annotations, and value is the type that has annotations to "mix in".Annotations associated with the value classes will be used to override annotations of the key class, associated with the same field or method. They can be further masked by sub-classes: you can think of it as injecting annotations between the target class and its sub-classes (or interfaces)
- Since:
- 1.2
-
_subtypeResolver
Registered concrete subtypes that can be used instead of (or in addition to) ones declared using annotations. Unlike most other settings, it is not configured as early as it is set, but rather only when a non-shared instance is constructed byObjectMapper(or -Reader or -Writer)Note: this is the only property left as non-final, to allow lazy construction of the instance as necessary.
- Since:
- 1.6
-
-
Constructor Details
-
MapperConfig
protected MapperConfig(ClassIntrospector<? extends BeanDescription> ci, AnnotationIntrospector ai, VisibilityChecker<?> vc, SubtypeResolver str, PropertyNamingStrategy pns, TypeFactory tf, HandlerInstantiator hi) -
MapperConfig
-
MapperConfig
- Since:
- 1.8
-
-
Method Details
-
fromAnnotations
Deprecated.Since 1.9, it is preferably to explicitly configure instances; this method also modifies existing instance which is against immutable design goals of this class.Method that checks class annotations that the argument Object has, and modifies settings of this configuration object accordingly, similar to how those annotations would affect actual value classes annotated with them, but with global scope. Note that not all annotations have global significance, and thus only subset of Jackson annotations will have any effect. -
withClassIntrospector
Method for constructing and returning a new instance with differentClassIntrospectorto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withAnnotationIntrospector
Method for constructing and returning a new instance with differentAnnotationIntrospectorto use (replacing old one).NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withVisibilityChecker
Method for constructing and returning a new instance with differentVisibilityCheckerto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withVisibility
Method for constructing and returning a new instance with different minimal visibility level for specified property typeNOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.9
-
withTypeResolverBuilder
Method for constructing and returning a new instance with differentTypeResolverBuilderto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withSubtypeResolver
Method for constructing and returning a new instance with differentSubtypeResolverto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withPropertyNamingStrategy
Method for constructing and returning a new instance with differentPropertyNamingStrategyto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withTypeFactory
Method for constructing and returning a new instance with differentTypeFactoryto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withDateFormat
Method for constructing and returning a new instance with differentDateFormatto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withHandlerInstantiator
Method for constructing and returning a new instance with differentHandlerInstantiatorto use.NOTE: make sure to register new instance with
ObjectMapperif directly calling this method.- Since:
- 1.8
-
withInsertedAnnotationIntrospector
Method for constructing and returning a new instance with additionalAnnotationIntrospectorinserted (as the highest priority one)- Since:
- 1.9
-
withAppendedAnnotationIntrospector
Method for constructing and returning a new instance with additionalAnnotationIntrospectorappended (as the lowest priority one)- Since:
- 1.9
-
isEnabled
Method for checking whether given feature is enabled or not -
isAnnotationProcessingEnabled
public abstract boolean isAnnotationProcessingEnabled()Method for determining whether annotation processing is enabled or not (default settings are typically that it is enabled; must explicitly disable).- Returns:
- True if annotation processing is enabled; false if not
- Since:
- 1.8
-
canOverrideAccessModifiers
public abstract boolean canOverrideAccessModifiers()Accessor for determining whether it is ok to try to force override of access modifiers to be able to get or set values of non-public Methods, Fields; to invoke non-public Constructors, Methods; or to instantiate non-public Classes. By default this is enabled, but on some platforms it needs to be prevented since if this would violate security constraints and cause failures.- Returns:
- True if access modifier overriding is allowed (and may be done for any Field, Method, Constructor or Class); false to prevent any attempts to override.
- Since:
- 1.8
-
shouldSortPropertiesAlphabetically
public abstract boolean shouldSortPropertiesAlphabetically()Accessor for checking whether default settings for property handling indicate that properties should be alphabetically ordered or not.- Since:
- 1.9
-
getClassIntrospector
-
getAnnotationIntrospector
Method for gettingAnnotationIntrospectorconfigured to introspect annotation values used for configuration.Non-final since it is actually overridden by sub-classes (for now?)
-
insertAnnotationIntrospector
Deprecated.Since 1.9 usewithInsertedAnnotationIntrospector(AnnotationIntrospector)instead; this method is deprecated as it changes state, preventing immutability of instancesMethod for registering specifiedAnnotationIntrospectoras the highest priority introspector (will be chained with existing introspector(s) which will be used as fallbacks for cases this introspector does not handle)- Parameters:
introspector- Annotation introspector to register.- Since:
- 1.7
-
appendAnnotationIntrospector
Deprecated.Since 1.9 usewithAppendedAnnotationIntrospector(AnnotationIntrospector)instead; this method is deprecated as it changes state, preventing immutability of instancesMethod for registering specifiedAnnotationIntrospectoras the lowest priority introspector, chained with existing introspector(s) and called as fallback for cases not otherwise handled.- Parameters:
introspector- Annotation introspector to register.- Since:
- 1.7
-
getDefaultVisibilityChecker
Accessor for object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers). Can be changed to allow different minimum visibility levels for auto-detection. Note that this is the global handler; individual types (classes) can further override active checker used (usingJsonAutoDetectannotation)- Since:
- 1.5
-
getPropertyNamingStrategy
- Since:
- 1.8
-
getHandlerInstantiator
- Since:
- 1.8
-
setMixInAnnotations
Method to use for defining mix-in annotations to use for augmenting annotations that processable (serializable / deserializable) classes have. Mixing in is done when introspecting class annotations and properties. Map passed contains keys that are target classes (ones to augment with new annotation overrides), and values that are source classes (have annotations to use for augmentation). Annotations from source classes (and their supertypes) will override annotations that target classes (and their super-types) have.- Since:
- 1.2
-
addMixInAnnotations
Method to use for adding mix-in annotations to use for augmenting specified class or interface. All annotations frommixinSourceare taken to override annotations thattarget(or its supertypes) has.- Parameters:
target- Class (or interface) whose annotations to effectively overridemixinSource- Class (or interface) whose annotations are to be "added" to target's annotations, overriding as necessary- Since:
- 1.2
-
findMixInClassFor
Method that will check if there are "mix-in" classes (with mix-in annotations) for given class- Specified by:
findMixInClassForin interfaceClassIntrospector.MixInResolver- Since:
- 1.2
-
mixInCount
public final int mixInCount()- Since:
- 1.8.1
-
getDefaultTyper
Method called to locate a type info handler for types that do not have one explicitly declared via annotations (or other configuration). If such default handler is configured, it is returned; otherwise null is returned.- Since:
- 1.5
-
getSubtypeResolver
Accessor for object used for finding out all reachable subtypes for supertypes; needed when a logical type name is used instead of class name (or custom scheme).- Since:
- 1.6
-
getTypeFactory
- Since:
- 1.8
-
constructType
-
constructType
Helper method that will constructJavaTypefor given type reference This is a simple short-cut for:getTypeFactory().constructType(valueTypeRef);- Since:
- 1.9
-
constructSpecializedType
-
getDateFormat
Method for accessing currently configured (textual) date format that will be used for reading or writing date values (in case of writing, only if textual output is configured; not if dates are to be serialized as time stamps).Note that typically
DateFormatinstances are not thread-safe (at least ones provided by JDK): this means that calling code should clone format instance before using it.This method is usually only called by framework itself, since there are convenience methods available via
DeserializationContextandSerializerProviderthat take care of cloning and thread-safe reuse. -
introspectClassAnnotations
Accessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.- Since:
- 1.7
-
introspectClassAnnotations
Accessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.- Since:
- 1.9
-
introspectDirectClassAnnotations
Accessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types.- Since:
- 1.7
-
introspectDirectClassAnnotations
Accessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types. -
typeResolverBuilderInstance
public TypeResolverBuilder<?> typeResolverBuilderInstance(Annotated annotated, Class<? extends TypeResolverBuilder<?>> builderClass) Method that can be called to obtain an instance ofTypeIdResolverof specified type.- Since:
- 1.8
-
typeIdResolverInstance
public TypeIdResolver typeIdResolverInstance(Annotated annotated, Class<? extends TypeIdResolver> resolverClass) Method that can be called to obtain an instance ofTypeIdResolverof specified type.- Since:
- 1.8
-
setAnnotationIntrospector
Deprecated.Since 1.8, use eitherwithAnnotationIntrospector(AnnotationIntrospector)or Module API insteadMethod for replacing existing annotation introspector(s) with specified introspector. Since this method modifies state of configuration object directly, its use is not recommended. -
setDateFormat
Deprecated.As of version 1.8, it is preferable to call method inObjectMapperinstead; or construct new instance withwithDateFormat(DateFormat)Method that will define specific date format to use for reading/writing Date and Calendar values. If null is passed, will useStdDateFormat. Instance is used as is, without creating a clone. Format object in use can be accessed usinggetDateFormat().- Parameters:
df- Date format to use, if not null; if null, the default format will be used
-
withAppendedAnnotationIntrospector(AnnotationIntrospector)instead; this method is deprecated as it changes state, preventing immutability of instances