Top Description Fields Constructors Methods
tools.jackson.databind.ser

public Class BeanSerializerFactory

extends BasicSerializerFactory
implements Serializable
Class Inheritance
All Implemented Interfaces
java.io.Serializable
Imports
java.util.*, com.fasterxml.jackson.annotation.JsonFormat, .JsonIgnoreProperties, .JsonIncludeProperties, .JsonTypeInfo.As, .ObjectIdGenerator, .ObjectIdGenerators, tools.jackson.core.JacksonException, .JsonGenerator, .JsonParser, .TokenStreamFactory, .TreeNode, tools.jackson.databind.*, tools.jackson.databind.cfg.SerializerFactoryConfig, tools.jackson.databind.introspect.*, tools.jackson.databind.jsontype.TypeSerializer, tools.jackson.databind.ser.impl.FilteredBeanPropertyWriter, .ObjectIdWriter, .PropertyBasedObjectIdGenerator, .UnsupportedTypeSerializer, tools.jackson.databind.ser.jdk.MapEntryAsPOJOSerializer, .MapSerializer, tools.jackson.databind.ser.std.StdDelegatingSerializer, .ToEmptyObjectSerializer, tools.jackson.databind.type.ReferenceType, tools.jackson.databind.util.BeanUtil, .ClassUtil, .Converter, .IgnorePropertiesUtil, .NativeImageUtil, .SimpleBeanPropertyDefinition

Factory class that can provide serializers for any regular Java beans (as defined by "having at least one get method recognizable as bean accessor" -- where 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 java.util.Lists and java.util.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.

Field Summary

Modifier and TypeField and Description
public static final BeanSerializerFactory
instance

Like BasicSerializerFactory, this factory is stateless, and thus a single shared global (== singleton) instance can be used without thread-safety issues.

private static final long
Inherited from tools.jackson.databind.ser.BasicSerializerFactory:
_factoryConfig

Constructor Summary

AccessConstructor and Description
protected
BeanSerializerFactory(SerializerFactoryConfig config)

Constructor for creating instances with specified configuration.

Method Summary

Modifier and TypeMethod and Description
protected BeanPropertyWriter
_constructWriter(SerializationContext ctxt, BeanPropertyDefinition propDef, PropertyBuilder pb, boolean staticTyping, AnnotatedMember accessor)

Secondary helper method for constructing BeanPropertyWriter for given member (field or method).

protected ValueSerializer<?>
_createSerializer2(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, JavaType type, JsonFormat.Value formatOverrides, boolean staticTyping)

protected ValueSerializer<?>
protected boolean
protected ValueSerializer<Object>
constructBeanOrAddOnSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value format, boolean staticTyping)

Method called to construct serializer based on checking which condition is matched:

  1. Nominal type is java.lang.Object: if so, return special "no type known" serializer
  2. If a known "not-POJO" type (like JDK Proxy), return null
  3. If at least one logical property found, build actual BeanSerializer
  4. If add-on type (like java.lang.Iterable) found, create appropriate serializer
  5. If one of Jackson's "well-known" annotations found, create bogus "empty Object" Serializer
protected BeanSerializerBuilder
protected BeanPropertyWriter
constructFilteredBeanWriter(BeanPropertyWriter writer, Class<?>[] inViews)

Method called to construct a filtered writer, for given view definitions.

protected ObjectIdWriter
protected PropertyBuilder
public ValueSerializer<Object>
createSerializer(SerializationContext ctxt, JavaType origType, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides)

Implements abstract tools.jackson.databind.ser.SerializerFactory.createSerializer.

Main serializer constructor method.

protected List<BeanPropertyWriter>
filterBeanProperties(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyWriter> props)

Overridable method that can filter out properties.

protected List<BeanPropertyWriter>
filterUnwantedJDKProperties(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyWriter> props)

Overridable method used to filter out specifically problematic JDK provided properties.

protected List<BeanPropertyWriter>
findBeanProperties(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, BeanSerializerBuilder builder)

Method used to collect all actual serializable properties.

protected boolean
isPotentialBeanType(Class<?> type)

Helper method used to skip processing for types that we know cannot be (i.e. are never consider to be) beans: things like primitives, Arrays, Enums, and proxy types.

protected void
processViews(SerializationConfig config, BeanSerializerBuilder builder)

Method called to handle view information for constructed serializer, based on bean property writers.

protected void
removeIgnorableTypes(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, List<BeanPropertyDefinition> properties)

Method that will apply by-type limitations (as per [JACKSON-429]); by default this is based on com.fasterxml.jackson.annotation.JsonIgnoreType annotation but can be supplied by module-provided introspectors too.

protected List<BeanPropertyWriter>
removeOverlappingTypeIds(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, BeanSerializerBuilder builder, List<BeanPropertyWriter> props)

Helper method called to ensure that we do not have "duplicate" type ids.

protected void
removeSetterlessGetters(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyDefinition> properties)

Helper method that will remove all properties that do not have a mutator.

public SerializerFactory
withConfig(SerializerFactoryConfig config)

Implements abstract tools.jackson.databind.ser.BasicSerializerFactory.withConfig.

Method used by module registration functionality, to attach additional serializer providers into this serializer factory.

Inherited from tools.jackson.databind.ser.BasicSerializerFactory:
_buildReferenceSerializer_calculateEffectiveFormat_checkMapContentInclusion_findContentSerializer_findInclusionWithContent_findKeySerializerbuildArraySerializerbuildCollectionSerializerbuildCollectionSerializerbuildContainerSerializerbuildEnumSerializerbuildEnumSetSerializerbuildIndexedListSerializerbuildIterableSerializerbuildIteratorSerializerbuildMapEntrySerializerbuildMapSerializercreateKeySerializercustomSerializersfindConverterfindConvertingSerializerfindFilterIdfindPropertyContentTypeSerializerfindReferenceSerializerfindSerializerByAddonTypefindSerializerByAnnotationsfindSerializerByPrimaryTypefindSerializerFromAnnotationgetDefaultNullKeySerializergetDefaultNullValueSerializerisIndexedListusesStaticTypingwithAdditionalKeySerializerswithAdditionalSerializerswithNullKeySerializerwithNullValueSerializerwithSerializerModifier

Field Detail

instanceback to summary
public static final BeanSerializerFactory instance

Like BasicSerializerFactory, this factory is stateless, and thus a single shared global (== singleton) instance can be used without thread-safety issues.

serialVersionUIDback to summary
private static final long serialVersionUID

Constructor Detail

BeanSerializerFactoryback to summary
protected BeanSerializerFactory(SerializerFactoryConfig config)

Constructor for creating instances with specified configuration.

Method Detail

_constructWriterback to summary
protected BeanPropertyWriter _constructWriter(SerializationContext ctxt, BeanPropertyDefinition propDef, PropertyBuilder pb, boolean staticTyping, AnnotatedMember accessor)

Secondary helper method for constructing BeanPropertyWriter for given member (field or method).

_createSerializer2back to summary
protected ValueSerializer<?> _createSerializer2(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, JavaType type, JsonFormat.Value formatOverrides, boolean staticTyping)
_findUnsupportedTypeSerializerback to summary
protected ValueSerializer<?> _findUnsupportedTypeSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef)
_isUnserializableJacksonTypeback to summary
protected boolean _isUnserializableJacksonType(SerializationContext ctxt, JavaType type)
constructBeanOrAddOnSerializerback to summary
protected ValueSerializer<Object> constructBeanOrAddOnSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value format, boolean staticTyping)

Method called to construct serializer based on checking which condition is matched:

  1. Nominal type is java.lang.Object: if so, return special "no type known" serializer
  2. If a known "not-POJO" type (like JDK Proxy), return null
  3. If at least one logical property found, build actual BeanSerializer
  4. If add-on type (like java.lang.Iterable) found, create appropriate serializer
  5. If one of Jackson's "well-known" annotations found, create bogus "empty Object" Serializer
or, if none matched, return null.
Annotations
@SuppressWarnings:unchecked
constructBeanSerializerBuilderback to summary
protected BeanSerializerBuilder constructBeanSerializerBuilder(SerializationConfig config, BeanDescription.Supplier beanDescRef)
constructFilteredBeanWriterback to summary
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.

constructObjectIdHandlerback to summary
protected ObjectIdWriter constructObjectIdHandler(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, List<BeanPropertyWriter> props)
constructPropertyBuilderback to summary
protected PropertyBuilder constructPropertyBuilder(SerializationConfig config, BeanDescription.Supplier beanDescRef)
createSerializerback to summary
public ValueSerializer<Object> createSerializer(SerializationContext ctxt, JavaType origType, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides)

Implements abstract tools.jackson.databind.ser.SerializerFactory.createSerializer.

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, java.lang.Iterable.

Note

sub-classes may choose to complete replace implementation, if they want to alter priority of serializer lookups.

Annotations
@Override
@SuppressWarnings:unchecked
filterBeanPropertiesback to summary
protected List<BeanPropertyWriter> filterBeanProperties(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyWriter> props)

Overridable method that can filter out properties. Default implementation checks annotations class may have.

filterUnwantedJDKPropertiesback to summary
protected List<BeanPropertyWriter> filterUnwantedJDKProperties(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyWriter> props)

Overridable method used to filter out specifically problematic JDK provided properties.

See issue databind-3305 for details.

findBeanPropertiesback to summary
protected List<BeanPropertyWriter> findBeanProperties(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, BeanSerializerBuilder builder)

Method used to collect all actual serializable properties. Can be overridden to implement custom detection schemes.

isPotentialBeanTypeback to summary
protected boolean isPotentialBeanType(Class<?> type)

Helper method used to skip processing for types that we know cannot 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.

processViewsback to summary
protected void processViews(SerializationConfig config, BeanSerializerBuilder builder)

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.

removeIgnorableTypesback to summary
protected void removeIgnorableTypes(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, List<BeanPropertyDefinition> properties)

Method that will apply by-type limitations (as per [JACKSON-429]); by default this is based on com.fasterxml.jackson.annotation.JsonIgnoreType annotation but can be supplied by module-provided introspectors too. Starting with 2.8 there are also "Config overrides" to consider.

removeOverlappingTypeIdsback to summary
protected List<BeanPropertyWriter> removeOverlappingTypeIds(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, BeanSerializerBuilder builder, List<BeanPropertyWriter> props)

Helper method called to ensure that we do not have "duplicate" type ids. Added to resolve [databind#222]

removeSetterlessGettersback to summary
protected void removeSetterlessGetters(SerializationConfig config, BeanDescription.Supplier beanDescRef, List<BeanPropertyDefinition> properties)

Helper method that will remove all properties that do not have a mutator.

withConfigback to summary
public SerializerFactory withConfig(SerializerFactoryConfig config)

Implements abstract tools.jackson.databind.ser.BasicSerializerFactory.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.

Annotations
@Override