ContainerSerializer
Date: 2016-12-04

com.fasterxml.jackson.databind.ser

## Class ContainerSerializer<T>

- java.lang.Object
- - com.fasterxml.jackson.databind.JsonSerializer<T>
  - - com.fasterxml.jackson.databind.ser.std.StdSerializer<T>
    - - com.fasterxml.jackson.databind.ser.ContainerSerializer<T>

- All Implemented Interfaces:
    JsonFormatVisitable, SchemaAware, java.io.Serializable
  Direct Known Subclasses:
    ArraySerializerBase, AsArraySerializerBase, MapEntrySerializer, MapSerializer

      public abstract class ContainerSerializer<T>
      extends StdSerializer<T>

  Intermediate base class for serializers used for serializing types that contain element(s) of other types, such as arrays, `Collection`s (`Lists`, `Sets` etc) and `Map`s and iterable things (`Iterator`s).
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class com.fasterxml.jackson.databind.JsonSerializer

      `JsonSerializer.None`

  - ### Field Summary

    - ### Fields inherited from class com.fasterxml.jackson.databind.ser.std.StdSerializer

      `_handledType`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `ContainerSerializer(java.lang.Class<?> t, boolean dummy)` Alternate constructor that is (alas!) needed to work around kinks of generic type handling
    `protected` | `ContainerSerializer(java.lang.Class<T> t)`
    `protected` | `ContainerSerializer(ContainerSerializer<?> src)`
    `protected` | `ContainerSerializer(JavaType fullType)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract ContainerSerializer<?>` | `_withValueTypeSerializer(TypeSerializer vts)` Method that needs to be implemented to allow construction of a new serializer object with given `TypeSerializer`, used when addition type information is to be embedded.
    `abstract JsonSerializer<?>` | `getContentSerializer()` Accessor for serializer used for serializing contents (List and array elements, Map values etc) of the container for which this serializer is used, if it is known statically.
    `abstract JavaType` | `getContentType()` Accessor for finding declared (static) element type for type this serializer is used for.
    `protected boolean` | `hasContentTypeAnnotation(SerializerProvider provider, BeanProperty property)` Deprecated. Since 2.7: should not be needed; should be enough to see if type has 'isStatic' modifier
    `abstract boolean` | `hasSingleElement(T value)` Method called to determine if the given value (of type handled by this serializer) contains exactly one element.
    `boolean` | `isEmpty(T value)` Deprecated.
    `ContainerSerializer<?>` | `withValueTypeSerializer(TypeSerializer vts)` Factory(-like) method that can be used to construct a new container serializer that uses specified `TypeSerializer` for decorating contained values with additional type information.

    - ### Methods inherited from class com.fasterxml.jackson.databind.ser.std.StdSerializer

      `acceptJsonFormatVisitor, createObjectNode, createSchemaNode, createSchemaNode, findAnnotatedContentSerializer, findConvertingContentSerializer, findFormatFeature, findFormatOverrides, findIncludeOverrides, findPropertyFilter, getSchema, getSchema, handledType, isDefaultSerializer, serialize, visitArrayFormat, visitArrayFormat, visitFloatFormat, visitIntFormat, visitIntFormat, visitStringFormat, visitStringFormat, wrapAndThrow, wrapAndThrow`

    - ### Methods inherited from class com.fasterxml.jackson.databind.JsonSerializer

      `getDelegatee, isEmpty, isUnwrappingSerializer, properties, replaceDelegatee, serializeWithType, unwrappingSerializer, usesObjectId, withFilterId`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ContainerSerializer

          protected ContainerSerializer(java.lang.Class<T> t)

    - #### ContainerSerializer

          protected ContainerSerializer(JavaType fullType)

      Since:
        2.5

    - #### ContainerSerializer

          protected ContainerSerializer(java.lang.Class<?> t,
                             boolean dummy)

      Alternate constructor that is (alas!) needed to work around kinks of generic type handling
      Parameters:
        `t` -

    - #### ContainerSerializer

          protected ContainerSerializer(ContainerSerializer<?> src)

  - ### Method Detail

    - #### withValueTypeSerializer

          public ContainerSerializer<?> withValueTypeSerializer(TypeSerializer vts)

      Factory(-like) method that can be used to construct a new container serializer that uses specified `TypeSerializer` for decorating contained values with additional type information.
      Parameters:
        `vts` - Type serializer to use for contained values; can be null, in which case 'this' serializer is returned as is
      Returns:
        Serializer instance that uses given type serializer for values if that is possible (or if not, just 'this' serializer)

    - #### getContentType

          public abstract JavaType getContentType()

      Accessor for finding declared (static) element type for type this serializer is used for.

    - #### getContentSerializer

          public abstract JsonSerializer<?> getContentSerializer()

      Accessor for serializer used for serializing contents (List and array elements, Map values etc) of the container for which this serializer is used, if it is known statically. Note that for dynamic types this may return null; if so, caller has to instead use `getContentType()` and `SerializerProvider.findValueSerializer(java.lang.Class<?>, com.fasterxml.jackson.databind.BeanProperty)`.

    - #### isEmpty

          @Deprecated
          public boolean isEmpty(T value)

      Deprecated.
      Description copied from class: `JsonSerializer`
      Method called to check whether given serializable value is considered "empty" value (for purposes of suppressing serialization of empty values).

      Default implementation will consider only null values to be empty.

      Overrides:
        `isEmpty` in class `JsonSerializer<T>`

    - #### hasSingleElement

          public abstract boolean hasSingleElement(T value)

      Method called to determine if the given value (of type handled by this serializer) contains exactly one element.

      Note: although it might seem sensible to instead define something like "getElementCount()" method, this would not work well for containers that do not keep track of size (like linked lists may not).

    - #### _withValueTypeSerializer

          protected abstract ContainerSerializer<?> _withValueTypeSerializer(TypeSerializer vts)

      Method that needs to be implemented to allow construction of a new serializer object with given `TypeSerializer`, used when addition type information is to be embedded.

    - #### hasContentTypeAnnotation

          @Deprecated
          protected boolean hasContentTypeAnnotation(SerializerProvider provider,
                                                    BeanProperty property)

      Deprecated. Since 2.7: should not be needed; should be enough to see if type has 'isStatic' modifier
      Helper method used to encapsulate logic for determining whether there is a property annotation that overrides element type; if so, we can and need to statically find the serializer.
      Since:
        2.1