Class BeanSerializerFactory
- Direct Known Subclasses:
CustomSerializerFactory
Object.getClass() does not count);
as well as for "standard" JDK types. Latter is achieved
by delegating calls to BasicSerializerFactory
to find serializers both for "standard" JDK types (and in some cases,
sub-classes as is the case for collection classes like
Lists and Maps) and bean (value)
classes.
Note about delegating calls to BasicSerializerFactory:
although it would be nicer to use linear delegation
for construction (to essentially dispatch all calls first to the
underlying BasicSerializerFactory; or alternatively after
failing to provide bean-based serializer}, there is a problem:
priority levels for detecting standard types are mixed. That is,
we want to check if a type is a bean after some of "standard" JDK
types, but before the rest.
As a result, "mixed" delegation used, and calls are NOT done using
regular SerializerFactory interface but rather via
direct calls to BasicSerializerFactory.
Finally, since all caching is handled by the serializer provider (not factory) and there is no configurability, this factory is stateless. This means that a global singleton instance can be used.
Notes for version 1.7 (and above): the new module registration system
required addition of withConfig(org.codehaus.jackson.map.SerializerFactory.Config), which has to
be redefined by sub-classes so that they can work properly with
pluggable additional serializer providing components.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classConfiguration settings container class for bean serializer factoryNested classes/interfaces inherited from class org.codehaus.jackson.map.SerializerFactory
SerializerFactory.Config -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final SerializerFactory.ConfigConfiguration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style)static final BeanSerializerFactoryLikeBasicSerializerFactory, this factory is stateless, and thus a single shared global (== singleton) instance can be used without thread-safety issues.Fields inherited from class org.codehaus.jackson.map.ser.BasicSerializerFactory
_arraySerializers, _concrete, _concreteLazy, optionalHandlers -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedConstructor for creating instances with specified configuration. -
Method Summary
Modifier and TypeMethodDescriptionprotected BeanPropertyWriter_constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember accessor) Secondary helper method for constructingBeanPropertyWriterfor given member (field or method).protected JsonSerializer<Object> constructBeanSerializer(SerializationConfig config, BasicBeanDescription beanDesc, BeanProperty property) Method called to construct serializer for serializing specified bean type.protected BeanSerializerBuilderprotected BeanPropertyWriterconstructFilteredBeanWriter(BeanPropertyWriter writer, Class<?>[] inViews) Method called to construct a filtered writer, for given view definitions.protected PropertyBuilderconstructPropertyBuilder(SerializationConfig config, BasicBeanDescription beanDesc) createKeySerializer(SerializationConfig config, JavaType type, BeanProperty property) Method called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)createSerializer(SerializationConfig config, JavaType origType, BeanProperty property) Main serializer constructor method.protected Iterable<Serializers> protected List<BeanPropertyWriter> filterBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyWriter> props) Overridable method that can filter out properties.protected List<BeanPropertyWriter> findBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc) Method used to collect all actual serializable properties.findBeanSerializer(SerializationConfig config, JavaType type, BasicBeanDescription beanDesc, BeanProperty property) Method that will try to construct aBeanSerializerfor given class.protected ObjectfindFilterId(SerializationConfig config, BasicBeanDescription beanDesc) Method called to find filter that is configured to be used with bean serializer being built, if any.findPropertyContentTypeSerializer(JavaType containerType, SerializationConfig config, AnnotatedMember accessor, BeanProperty property) Method called to create a type information serializer for values of given container property if one is needed.findPropertyTypeSerializer(JavaType baseType, SerializationConfig config, AnnotatedMember accessor, BeanProperty property) Method called to create a type information serializer for values of given non-container property if one is needed.protected booleanisPotentialBeanType(Class<?> type) Helper method used to skip processing for types that we know can not be (i.e.protected voidprocessViews(SerializationConfig config, BeanSerializerBuilder builder) Method called to handle view information for constructed serializer, based on bean property writers.protected voidremoveIgnorableTypes(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyDefinition> properties) Method that will apply by-type limitations (as per [JACKSON-429]); by default this is based onJsonIgnoreTypeannotation but can be supplied by module-provided introspectors too.protected voidremoveSetterlessGetters(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyDefinition> properties) Helper method that will remove all properties that do not have a mutator.protected List<BeanPropertyWriter> sortBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyWriter> props) Deprecated.Since 1.9 this method does nothing, so there is no benefit from overriding it; it will be removed from 2.0.withConfig(SerializerFactory.Config config) Method used by module registration functionality, to attach additional serializer providers into this serializer factory.Methods inherited from class org.codehaus.jackson.map.ser.BasicSerializerFactory
buildArraySerializer, buildCollectionLikeSerializer, buildCollectionSerializer, buildContainerSerializer, buildEnumMapSerializer, buildEnumSetSerializer, buildIterableSerializer, buildIteratorSerializer, buildMapLikeSerializer, buildMapSerializer, createTypeSerializer, findContentSerializer, findKeySerializer, findSerializerByAddonType, findSerializerByLookup, findSerializerByPrimaryType, findSerializerFromAnnotation, getNullSerializer, isIndexedList, modifySecondaryTypesByAnnotation, modifyTypeByAnnotation, usesStaticTypingMethods inherited from class org.codehaus.jackson.map.SerializerFactory
createSerializer, createTypeSerializer, withAdditionalKeySerializers, withAdditionalSerializers, withSerializerModifier
-
Field Details
-
instance
LikeBasicSerializerFactory, this factory is stateless, and thus a single shared global (== singleton) instance can be used without thread-safety issues. -
_factoryConfig
Configuration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style)- Since:
- 1.7
-
-
Constructor Details
-
BeanSerializerFactory
Constructor for creating instances with specified configuration.
-
-
Method Details
-
getConfig
- Specified by:
getConfigin classSerializerFactory
-
withConfig
Method used by module registration functionality, to attach additional serializer providers into this serializer factory. This is typically handled by constructing a new instance with additional serializers, to ensure thread-safe access.- Specified by:
withConfigin classSerializerFactory- Since:
- 1.7
-
customSerializers
- Specified by:
customSerializersin classBasicSerializerFactory
-
createSerializer
public JsonSerializer<Object> createSerializer(SerializationConfig config, JavaType origType, BeanProperty property) throws JsonMappingException Main serializer constructor method. We will have to be careful with respect to ordering of various method calls: essentially we want to reliably figure out which classes are standard types, and which are beans. The problem is that some bean Classes may implement standard interfaces (say,Iterable.Note: sub-classes may choose to complete replace implementation, if they want to alter priority of serializer lookups.
- Specified by:
createSerializerin classBasicSerializerFactory- Throws:
JsonMappingException
-
createKeySerializer
public JsonSerializer<Object> createKeySerializer(SerializationConfig config, JavaType type, BeanProperty property) Description copied from class:SerializerFactoryMethod called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)- Specified by:
createKeySerializerin classSerializerFactory- Parameters:
config- Serialization configuration in usetype- Declared type for Map keysproperty- Property that contains Map being serialized; null when serializing root Map value.- Returns:
- Serializer to use, if factory knows it; null if not (in which case default serializer is to be used)
-
findBeanSerializer
public JsonSerializer<Object> findBeanSerializer(SerializationConfig config, JavaType type, BasicBeanDescription beanDesc, BeanProperty property) throws JsonMappingException Method that will try to construct aBeanSerializerfor given class. Returns null if no properties are found.- Throws:
JsonMappingException
-
findPropertyTypeSerializer
public TypeSerializer findPropertyTypeSerializer(JavaType baseType, SerializationConfig config, AnnotatedMember accessor, BeanProperty property) throws JsonMappingException Method called to create a type information serializer for values of given non-container property if one is needed. If not needed (no polymorphic handling configured), should return null.- Parameters:
baseType- Declared type to use as the base type for type information serializer- Returns:
- Type serializer to use for property values, if one is needed; null if not.
- Throws:
JsonMappingException- Since:
- 1.5
-
findPropertyContentTypeSerializer
public TypeSerializer findPropertyContentTypeSerializer(JavaType containerType, SerializationConfig config, AnnotatedMember accessor, BeanProperty property) throws JsonMappingException Method called to create a type information serializer for values of given container property if one is needed. If not needed (no polymorphic handling configured), should return null.- Parameters:
containerType- Declared type of the container to use as the base type for type information serializer- Returns:
- Type serializer to use for property value contents, if one is needed; null if not.
- Throws:
JsonMappingException- Since:
- 1.5
-
constructBeanSerializer
protected JsonSerializer<Object> constructBeanSerializer(SerializationConfig config, BasicBeanDescription beanDesc, BeanProperty property) throws JsonMappingException Method called to construct serializer for serializing specified bean type.- Throws:
JsonMappingException- Since:
- 1.6
-
constructFilteredBeanWriter
protected BeanPropertyWriter constructFilteredBeanWriter(BeanPropertyWriter writer, Class<?>[] inViews) Method called to construct a filtered writer, for given view definitions. Default implementation constructs filter that checks active view type to views property is to be included in. -
constructPropertyBuilder
protected PropertyBuilder constructPropertyBuilder(SerializationConfig config, BasicBeanDescription beanDesc) -
constructBeanSerializerBuilder
-
findFilterId
Method called to find filter that is configured to be used with bean serializer being built, if any.- Since:
- 1.7
-
isPotentialBeanType
Helper method used to skip processing for types that we know can not be (i.e. are never consider to be) beans: things like primitives, Arrays, Enums, and proxy types.Note that usually we shouldn't really be getting these sort of types anyway; but better safe than sorry.
-
findBeanProperties
protected List<BeanPropertyWriter> findBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc) throws JsonMappingException Method used to collect all actual serializable properties. Can be overridden to implement custom detection schemes.- Throws:
JsonMappingException
-
filterBeanProperties
protected List<BeanPropertyWriter> filterBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyWriter> props) Overridable method that can filter out properties. Default implementation checks annotations class may have. -
sortBeanProperties
@Deprecated protected List<BeanPropertyWriter> sortBeanProperties(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyWriter> props) Deprecated.Since 1.9 this method does nothing, so there is no benefit from overriding it; it will be removed from 2.0.Method that used to be called (pre-1.9) to impose configured ordering on list of discovered properties. With 1.9 it is not needed any more as ordering is done earlier. -
processViews
Method called to handle view information for constructed serializer, based on bean property writers.Note that this method is designed to be overridden by sub-classes if they want to provide custom view handling. As such it is not considered an internal implementation detail, and will be supported as part of API going forward.
NOTE: signature of this method changed in 1.7, due to other significant changes (esp. use of builder for serializer construction).
-
removeIgnorableTypes
protected void removeIgnorableTypes(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyDefinition> properties) Method that will apply by-type limitations (as per [JACKSON-429]); by default this is based onJsonIgnoreTypeannotation but can be supplied by module-provided introspectors too. -
removeSetterlessGetters
protected void removeSetterlessGetters(SerializationConfig config, BasicBeanDescription beanDesc, List<BeanPropertyDefinition> properties) Helper method that will remove all properties that do not have a mutator.- Since:
- 1.9
-
_constructWriter
protected BeanPropertyWriter _constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember accessor) throws JsonMappingException Secondary helper method for constructingBeanPropertyWriterfor given member (field or method).- Throws:
JsonMappingException
-