com.fasterxml.jackson.databind.jsontype

## Class TypeSerializer

- java.lang.Object
- - com.fasterxml.jackson.databind.jsontype.TypeSerializer

- Direct Known Subclasses:
    TypeSerializerBase

      public abstract class TypeSerializer
      extends Object

  Interface for serializing type information regarding instances of specified base type (super class), so that exact subtype can be properly deserialized later on. These instances are to be called by regular `JsonSerializer`s using proper contextual calls, to add type information using mechanism type serializer was configured with.

  NOTE: version 2.9 contains significant attempt at simplifying interface, as well as giving format implementation (via `JsonGenerator`) more control over actual serialization details. Minor changes are required to change call pattern so that return value of "prefix" write needs to be passed to "suffix" write.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `TypeSerializer()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `_writeLegacySuffix(JsonGenerator g, WritableTypeId typeId)` Helper method needed for backwards compatibility: since original type id can not be routed through completely, we have to reverse-engineer likely setting before calling suffix.
    `abstract TypeSerializer` | `forProperty(BeanProperty prop)` Method called to create contextual version, to be used for values of given property.
    `abstract String` | `getPropertyName()` Name of property that contains type information, if property-based inclusion is used.
    `abstract TypeIdResolver` | `getTypeIdResolver()` Accessor for object that handles conversions between types and matching type ids.
    `abstract JsonTypeInfo.As` | `getTypeInclusion()` Accessor for type information inclusion method that serializer uses; indicates how type information is embedded in resulting JSON.
    `WritableTypeId` | `typeId(Object value, Class<?> typeForId, JsonToken valueShape)`
    `WritableTypeId` | `typeId(Object value, JsonToken valueShape)` Factory method for constructing type id value object to pass to `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)`.
    `WritableTypeId` | `typeId(Object value, JsonToken valueShape, Object id)`
    `void` | `writeCustomTypePrefixForArray(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeCustomTypePrefixForObject(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeCustomTypePrefixForScalar(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeCustomTypeSuffixForArray(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeCustomTypeSuffixForObject(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeCustomTypeSuffixForScalar(Object value, JsonGenerator g, String typeId)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
    `abstract WritableTypeId` | `writeTypePrefix(JsonGenerator g, WritableTypeId typeId)` Method called to write initial part of type information for given value, along with possible wrapping to use: details are specified by `typeId` argument.
    `void` | `writeTypePrefixForArray(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypePrefixForArray(Object value, JsonGenerator g, Class<?> type)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypePrefixForObject(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypePrefixForObject(Object value, JsonGenerator g, Class<?> type)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypePrefixForScalar(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypePrefixForScalar(Object value, JsonGenerator g, Class<?> type)` Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
    `abstract WritableTypeId` | `writeTypeSuffix(JsonGenerator g, WritableTypeId typeId)` Method that should be called after `writeTypePrefix(JsonGenerator, WritableTypeId)` and matching value write have been called, passing `WritableTypeId` returned.
    `void` | `writeTypeSuffixForArray(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypeSuffixForObject(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
    `void` | `writeTypeSuffixForScalar(Object value, JsonGenerator g)` Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead

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

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

- - ### Constructor Detail

    - #### TypeSerializer

          public TypeSerializer()

  - ### Method Detail

    - #### forProperty

          public abstract TypeSerializer forProperty(BeanProperty prop)

      Method called to create contextual version, to be used for values of given property. This may be the type itself (as is the case for bean properties), or values contained (for `Collection` or `Map` valued properties).
      Since:
        2.0

    - #### getTypeInclusion

          public abstract JsonTypeInfo.As getTypeInclusion()

      Accessor for type information inclusion method that serializer uses; indicates how type information is embedded in resulting JSON.

    - #### getPropertyName

          public abstract String getPropertyName()

      Name of property that contains type information, if property-based inclusion is used.

    - #### getTypeIdResolver

          public abstract TypeIdResolver getTypeIdResolver()

      Accessor for object that handles conversions between types and matching type ids.

    - #### typeId

          public WritableTypeId typeId(Object value,
                                       JsonToken valueShape)

      Factory method for constructing type id value object to pass to `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)`.

    - #### typeId

          public WritableTypeId typeId(Object value,
                                       JsonToken valueShape,
                                       Object id)

    - #### typeId

          public WritableTypeId typeId(Object value,
                                       Class<?> typeForId,
                                       JsonToken valueShape)

    - #### writeTypePrefix

          public abstract WritableTypeId writeTypePrefix(JsonGenerator g,
                                                         WritableTypeId typeId)
                                                  throws IOException

      Method called to write initial part of type information for given value, along with possible wrapping to use: details are specified by `typeId` argument. Note that for structured types (Object, Array), this call will add necessary start token so it should NOT be explicitly written, unlike with non-type-id value writes.

      See `writeTypeSuffix(JsonGenerator, WritableTypeId)` for a complete example of typical usage.

      Parameters:
        `g` - Generator to use for outputting type id and possible wrapping
        `typeId` - Details of what type id is to be written, how.
      Throws:
        `IOException`
      Since:
        2.9

    - #### writeTypeSuffix

          public abstract WritableTypeId writeTypeSuffix(JsonGenerator g,
                                                         WritableTypeId typeId)
                                                  throws IOException

      Method that should be called after `writeTypePrefix(JsonGenerator, WritableTypeId)` and matching value write have been called, passing `WritableTypeId` returned. Usual idiom is:

           // Indicator generator that type identifier may be needed; generator may write
           // one as suggested, modify information, or take some other action
           // NOTE! For Object/Array types, this will ALSO write start marker!
           WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
                    typeSer.typeId(value, JsonToken.START_OBJECT));

           // serializing actual value for which TypeId may have been written... like
           // NOTE: do NOT write START_OBJECT before OR END_OBJECT after:
           g.writeStringField("message", "Hello, world!"

           // matching type suffix call to let generator chance to add suffix, if any
           // NOTE! For Object/Array types, this will ALSO write end marker!
           typeSer.writeTypeSuffix(gen, typeIdDef);

      Throws:
        `IOException`
      Since:
        2.9

    - #### writeTypePrefixForScalar

          @Deprecated
          public void writeTypePrefixForScalar(Object value,
                                                           JsonGenerator g)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.VALUE_STRING));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypePrefixForObject

          @Deprecated
          public void writeTypePrefixForObject(Object value,
                                                           JsonGenerator g)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.START_OBJECT));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypePrefixForArray

          @Deprecated
          public void writeTypePrefixForArray(Object value,
                                                          JsonGenerator g)
                                                   throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.START_ARRAY));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypeSuffixForScalar

          @Deprecated
          public void writeTypeSuffixForScalar(Object value,
                                                           JsonGenerator g)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypeSuffix(g, typeId(value, JsonToken.VALUE_STRING));`. See `writeTypeSuffix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypeSuffixForObject

          @Deprecated
          public void writeTypeSuffixForObject(Object value,
                                                           JsonGenerator g)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypeSuffix(g, typeId(value, JsonToken.START_OBJECT));`. See `writeTypeSuffix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypeSuffixForArray

          @Deprecated
          public void writeTypeSuffixForArray(Object value,
                                                          JsonGenerator g)
                                                   throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypeSuffix(g, typeId(value, JsonToken.START_ARRAY));`. See `writeTypeSuffix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypePrefixForScalar

          @Deprecated
          public void writeTypePrefixForScalar(Object value,
                                                           JsonGenerator g,
                                                           Class<?> type)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, type, JsonToken.VALUE_STRING));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypePrefixForObject

          @Deprecated
          public void writeTypePrefixForObject(Object value,
                                                           JsonGenerator g,
                                                           Class<?> type)
                                                    throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, type, JsonToken.START_OBJECT));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeTypePrefixForArray

          @Deprecated
          public void writeTypePrefixForArray(Object value,
                                                          JsonGenerator g,
                                                          Class<?> type)
                                                   throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, type, JsonToken.START_ARRAY));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeCustomTypePrefixForScalar

          @Deprecated
          public void writeCustomTypePrefixForScalar(Object value,
                                                                 JsonGenerator g,
                                                                 String typeId)
                                                          throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.VALUE_STRING, typeId));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeCustomTypePrefixForObject

          @Deprecated
          public void writeCustomTypePrefixForObject(Object value,
                                                                 JsonGenerator g,
                                                                 String typeId)
                                                          throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.START_OBJECT, typeId));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeCustomTypePrefixForArray

          @Deprecated
          public void writeCustomTypePrefixForArray(Object value,
                                                                JsonGenerator g,
                                                                String typeId)
                                                         throws IOException

      Deprecated. Since 2.9 use `writeTypePrefix(JsonGenerator, WritableTypeId)` instead
      DEPRECATED: now equivalent to: `writeTypePrefix(g, typeId(value, JsonToken.START_ARRAY, typeId));`. See `writeTypePrefix(com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.core.type.WritableTypeId)` for more info.
      Throws:
        `IOException`

    - #### writeCustomTypeSuffixForScalar

          @Deprecated
          public void writeCustomTypeSuffixForScalar(Object value,
                                                                 JsonGenerator g,
                                                                 String typeId)
                                                          throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      Throws:
        `IOException`

    - #### writeCustomTypeSuffixForObject

          @Deprecated
          public void writeCustomTypeSuffixForObject(Object value,
                                                                 JsonGenerator g,
                                                                 String typeId)
                                                          throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      Throws:
        `IOException`

    - #### writeCustomTypeSuffixForArray

          @Deprecated
          public void writeCustomTypeSuffixForArray(Object value,
                                                                JsonGenerator g,
                                                                String typeId)
                                                         throws IOException

      Deprecated. Since 2.9 use `writeTypeSuffix(JsonGenerator, WritableTypeId)` instead
      Throws:
        `IOException`

    - #### _writeLegacySuffix

          protected final void _writeLegacySuffix(JsonGenerator g,
                                                  WritableTypeId typeId)
                                           throws IOException

      Helper method needed for backwards compatibility: since original type id can not be routed through completely, we have to reverse-engineer likely setting before calling suffix.
      Throws:
        `IOException`
      Since:
        2.9

Copyright © 2008–2020 FasterXML. All rights reserved.