## com.fasterxml.jackson.databind.ser
Class BeanSerializerFactory

    java.lang.Object
      com.fasterxml.jackson.databind.ser.SerializerFactory
          com.fasterxml.jackson.databind.ser.BasicSerializerFactory
              com.fasterxml.jackson.databind.ser.BeanSerializerFactory

All Implemented Interfaces:
  Serializable

    public class BeanSerializerFactory

extends BasicSerializerFactory
implements Serializable

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 `List`s and `Map`s) 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.

See Also:
  Serialized Form

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

Fields inherited from class com.fasterxml.jackson.databind.ser.BasicSerializerFactory
`_concrete, _concreteLazy, _factoryConfig, optionalHandlers`

Constructor Summary
`protected` `BeanSerializerFactory(SerializerFactoryConfig config)` Constructor for creating instances with specified configuration.

Method Summary
`protected BeanPropertyWriter` `_constructWriter(SerializerProvider prov, BeanPropertyDefinition propDef, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, AnnotatedMember accessor)` Secondary helper method for constructing `BeanPropertyWriter` for given member (field or method).
`protected JsonSerializer<Object>` `constructBeanSerializer(SerializerProvider prov, BeanDescription beanDesc)` Method called to construct serializer for serializing specified bean type.
`protected JsonSerializer<Object>` `constructBeanSerializer(SerializerProvider prov, BeanDescription beanDesc, BeanProperty property)` Deprecated. Since 2.1, do not pass 'property' argument
`protected BeanSerializerBuilder` `constructBeanSerializerBuilder(BeanDescription beanDesc)`
`protected BeanPropertyWriter` `constructFilteredBeanWriter(BeanPropertyWriter writer, Class<?>[] inViews)` Method called to construct a filtered writer, for given view definitions.
`protected ObjectIdWriter` `constructObjectIdHandler(SerializerProvider prov, BeanDescription beanDesc, List<BeanPropertyWriter> props)`
`protected PropertyBuilder` `constructPropertyBuilder(SerializationConfig config, BeanDescription beanDesc)`
`JsonSerializer<Object>` `createSerializer(SerializerProvider prov, JavaType origType)` Main serializer constructor method.
`protected Iterable<Serializers>` `customSerializers()`
`protected List<BeanPropertyWriter>` `filterBeanProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> props)` Overridable method that can filter out properties.
`protected List<BeanPropertyWriter>` `findBeanProperties(SerializerProvider prov, BeanDescription beanDesc, BeanSerializerBuilder builder)` Method used to collect all actual serializable properties.
`JsonSerializer<Object>` `findBeanSerializer(SerializerProvider prov, JavaType type, BeanDescription beanDesc)` Method that will try to construct a `BeanSerializer` for given class.
`JsonSerializer<Object>` `findBeanSerializer(SerializerProvider prov, JavaType type, BeanDescription beanDesc, BeanProperty property)` Deprecated. Since 2.1 (use variant without 'property' argument).
`protected Object` `findFilterId(SerializationConfig config, BeanDescription beanDesc)` Method called to find filter that is configured to be used with bean serializer being built, if any.
`TypeSerializer` `findPropertyContentTypeSerializer(JavaType containerType, SerializationConfig config, AnnotatedMember accessor)` Method called to create a type information serializer for values of given container property if one is needed.
`TypeSerializer` `findPropertyTypeSerializer(JavaType baseType, SerializationConfig config, AnnotatedMember accessor)` Method called to create a type information serializer for values of given non-container property if one is needed.
`TypeSerializer` `findPropertyTypeSerializer(JavaType baseType, SerializationConfig config, AnnotatedMember accessor, BeanProperty property)` Deprecated. Since 2.1
`protected boolean` `isPotentialBeanType(Class<?> type)` Helper method used to skip processing for types that we know can not be (i.e.
`protected void` `processViews(SerializationConfig config, BeanSerializerBuilder builder)` Method called to handle view information for constructed serializer, based on bean property writers.
`protected void` `removeIgnorableTypes(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyDefinition> properties)` Method that will apply by-type limitations (as per [JACKSON-429]); by default this is based on `JsonIgnoreType` annotation but can be supplied by module-provided introspectors too.
`protected void` `removeSetterlessGetters(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyDefinition> properties)` Helper method that will remove all properties that do not have a mutator.
`SerializerFactory` `withConfig(SerializerFactoryConfig config)` Method used by module registration functionality, to attach additional serializer providers into this serializer factory.

Methods inherited from class com.fasterxml.jackson.databind.ser.BasicSerializerFactory

`_findContentSerializer, _findKeySerializer, _verifyAsClass, buildArraySerializer, buildCollectionSerializer, buildCollectionSerializer, buildContainerSerializer, buildContainerSerializer, buildIterableSerializer, buildIteratorSerializer, buildMapSerializer, createKeySerializer, createTypeSerializer, findSerializerByAddonType, findSerializerByAnnotations, findSerializerByLookup, findSerializerByPrimaryType, findSerializerFromAnnotation, getFactoryConfig, getNullSerializer, isIndexedList, modifySecondaryTypesByAnnotation, modifyTypeByAnnotation, usesStaticTyping, usesStaticTyping, withAdditionalKeySerializers, withAdditionalSerializers, withSerializerModifier`

Methods inherited from class com.fasterxml.jackson.databind.ser.SerializerFactory
`createSerializer`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### instance

    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.

Constructor Detail

### BeanSerializerFactory

    protected BeanSerializerFactory(SerializerFactoryConfig config)

  Constructor for creating instances with specified configuration.

Method Detail

### withConfig

    public SerializerFactory withConfig(SerializerFactoryConfig config)

  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:
    `withConfig` in class `BasicSerializerFactory`

### customSerializers

    protected Iterable<Serializers> customSerializers()

  Specified by:
    `customSerializers` in class `BasicSerializerFactory`

### createSerializer

    public JsonSerializer<Object> createSerializer(SerializerProvider prov,
                                                   JavaType origType)
                                            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:
    `createSerializer` in class `BasicSerializerFactory`
  Parameters:
    `prov` - Provider that needs to be used to resolve annotation-provided serializers (but NOT for others)
  Throws:
    `JsonMappingException`

### findBeanSerializer

    @Deprecated
    public final JsonSerializer<Object> findBeanSerializer(SerializerProvider prov,
                                                                      JavaType type,
                                                                      BeanDescription beanDesc,
                                                                      BeanProperty property)
                                                    throws JsonMappingException

  Deprecated. Since 2.1 (use variant without 'property' argument).

  Deprecated method; final to help identify problems with sub-classes, as this method will NOT be called any more in 2.1

  Throws:
    `JsonMappingException`

### findBeanSerializer

    public JsonSerializer<Object> findBeanSerializer(SerializerProvider prov,
                                                     JavaType type,
                                                     BeanDescription beanDesc)
                                              throws JsonMappingException

  Method that will try to construct a `BeanSerializer` for given class. Returns null if no properties are found.

  Throws:
    `JsonMappingException`

### findPropertyTypeSerializer

    @Deprecated
    public final TypeSerializer findPropertyTypeSerializer(JavaType baseType,
                                                                      SerializationConfig config,
                                                                      AnnotatedMember accessor,
                                                                      BeanProperty property)
                                                    throws JsonMappingException

  Deprecated. Since 2.1

  Throws:
    `JsonMappingException`

### findPropertyTypeSerializer

    public TypeSerializer findPropertyTypeSerializer(JavaType baseType,
                                                     SerializationConfig config,
                                                     AnnotatedMember accessor)
                                              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`

### findPropertyContentTypeSerializer

    public TypeSerializer findPropertyContentTypeSerializer(JavaType containerType,
                                                            SerializationConfig config,
                                                            AnnotatedMember accessor)
                                                     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`

### constructBeanSerializer

    @Deprecated
    protected final JsonSerializer<Object> constructBeanSerializer(SerializerProvider prov,
                                                                              BeanDescription beanDesc,
                                                                              BeanProperty property)
                                                            throws JsonMappingException

  Deprecated. Since 2.1, do not pass 'property' argument

  Deprecated method; final to help identify problems with sub-classes, as this method will NOT be called any more in 2.1

  Throws:
    `JsonMappingException`

### constructBeanSerializer

    protected JsonSerializer<Object> constructBeanSerializer(SerializerProvider prov,
                                                             BeanDescription beanDesc)
                                                      throws JsonMappingException

  Method called to construct serializer for serializing specified bean type.

  Throws:
    `JsonMappingException`
  Since:
    2.1

### constructObjectIdHandler

    protected ObjectIdWriter constructObjectIdHandler(SerializerProvider prov,
                                                      BeanDescription beanDesc,
                                                      List<BeanPropertyWriter> props)
                                               throws JsonMappingException

  Throws:
    `JsonMappingException`

### 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,
                                                       BeanDescription beanDesc)

### constructBeanSerializerBuilder

    protected BeanSerializerBuilder constructBeanSerializerBuilder(BeanDescription beanDesc)

### findFilterId

    protected Object findFilterId(SerializationConfig config,
                                  BeanDescription beanDesc)

  Method called to find filter that is configured to be used with bean serializer being built, if any.

### isPotentialBeanType

    protected boolean isPotentialBeanType(Class<?> type)

  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(SerializerProvider prov,
                                                          BeanDescription beanDesc,
                                                          BeanSerializerBuilder builder)
                                                   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,
                                                            BeanDescription beanDesc,
                                                            List<BeanPropertyWriter> props)

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

### processViews

    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.

### removeIgnorableTypes

    protected void removeIgnorableTypes(SerializationConfig config,
                                        BeanDescription beanDesc,
                                        List<BeanPropertyDefinition> properties)

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

### removeSetterlessGetters

    protected void removeSetterlessGetters(SerializationConfig config,
                                           BeanDescription beanDesc,
                                           List<BeanPropertyDefinition> properties)

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

### _constructWriter

    protected BeanPropertyWriter _constructWriter(SerializerProvider prov,
                                                  BeanPropertyDefinition propDef,
                                                  TypeBindings typeContext,
                                                  PropertyBuilder pb,
                                                  boolean staticTyping,
                                                  AnnotatedMember accessor)
                                           throws JsonMappingException

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

  Throws:
    `JsonMappingException`

Copyright © 2012 FasterXML. All Rights Reserved.