JacksonSmileProvider (Jackson JAX-RS 2.11.1-SNAPSHOT API)
Date: 2020-04-25

com.fasterxml.jackson.jaxrs.smile

## Class JacksonSmileProvider

- java.lang.Object
- - com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>
  - - com.fasterxml.jackson.jaxrs.smile.JacksonSmileProvider

- All Implemented Interfaces:
    com.fasterxml.jackson.core.Versioned, javax.ws.rs.ext.MessageBodyReader<Object>, javax.ws.rs.ext.MessageBodyWriter<Object>
  Direct Known Subclasses:
    JacksonJaxbSmileProvider

      @Provider
       @Consumes(value="*/*")
       @Produces(value="*/*")
      public class JacksonSmileProvider
      extends ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>

  Basic implementation of JAX-RS abstractions (`MessageBodyReader`, `MessageBodyWriter`) needed for binding Smile ("application/x-jackson-smile") content to and from Java Objects ("POJO"s).

  Actual data binding functionality is implemented by `ObjectMapper`: mapper to use can be configured in multiple ways:

  - By explicitly passing mapper to use in constructor
  - By explictly setting mapper to use by `ProviderBase.setMapper(MAPPER)`
  - By defining JAX-RS `Provider` that returns `ObjectMapper`s.
  - By doing none of above, in which case a default mapper instance is constructed (and configured if configuration methods are called)
  The last method ("do nothing specific") is often good enough; explicit passing of Mapper is simple and explicit; and Provider-based method may make sense with Depedency Injection frameworks, or if Mapper has to be configured differently for different media types.

  Note that the default mapper instance will be automatically created if one of explicit configuration methods (like `ProviderBase.configure(com.fasterxml.jackson.jaxrs.cfg.JaxRSFeature, boolean)`) is called: if so, Provider-based introspection is NOT used, but the resulting Mapper is used as configured.

  Note that there is also a sub-class -- (`JacksonJaxbSmileProvider`) -- that is configured by default to use both Jackson and JAXB annotations for configuration (base class when used as-is defaults to using just Jackson annotations)

  Author:
    Tatu Saloranta

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected javax.ws.rs.ext.Providers` | `_providers` Injectable context object used to locate configured instance of `ObjectMapper` to use for actual serialization.
    `static Annotations[]` | `BASIC_ANNOTATIONS` Default annotation sets to use, if not explicitly defined during construction: only Jackson annotations are used for the base class.

    - ### Fields inherited from class com.fasterxml.jackson.jaxrs.base.ProviderBase

      `_cfgCheckCanDeserialize, _cfgCheckCanSerialize, _cfgCustomUntouchables, _defaultReadView, _defaultWriteView, _jaxRSFeatures, _mapperConfig, _noContentExceptionRef, _readers, _unreadableClasses, _untouchables, _unwritableClasses, _writers, CLASS_NAME_NO_CONTENT_EXCEPTION, DEFAULT_UNREADABLES, DEFAULT_UNTOUCHABLES, DEFAULT_UNWRITABLES, HEADER_CONTENT_TYPE_OPTIONS, JAXRS_FEATURE_DEFAULTS, noContentExceptionSupplier`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JacksonSmileProvider()` Default constructor, usually used when provider is automatically configured to be used with JAX-RS implementation.
    `JacksonSmileProvider(Annotations... annotationsToUse)`
    `JacksonSmileProvider(com.fasterxml.jackson.databind.ObjectMapper mapper)`
    `JacksonSmileProvider(com.fasterxml.jackson.databind.ObjectMapper mapper, Annotations[] annotationsToUse)` Constructor to use when a custom mapper (usually components like serializer/deserializer factories that have been configured) is to be used.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected SmileEndpointConfig` | `_configForReading(com.fasterxml.jackson.databind.ObjectReader reader, Annotation[] annotations)`
    `protected SmileEndpointConfig` | `_configForWriting(com.fasterxml.jackson.databind.ObjectWriter writer, Annotation[] annotations)`
    `protected com.fasterxml.jackson.databind.ObjectMapper` | `_locateMapperViaProvider(Class<?> type, javax.ws.rs.core.MediaType mediaType)` Method called to locate `ObjectMapper` to use for serialization and deserialization.
    `protected boolean` | `hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)` Helper method used to check whether given media type is Smile type or sub type.
    `com.fasterxml.jackson.core.Version` | `version()` Method that will return version information stored in and read from jar that contains this class.

    - ### Methods inherited from class com.fasterxml.jackson.jaxrs.base.ProviderBase

      `_addSuperTypes, _configForReading, _configForWriting, _containedIn, _createGenerator, _createNoContentException, _createParser, _endpointForReading, _endpointForWriting, _findCustomUntouchable, _isIgnorableForReading, _isIgnorableForWriting, _isSpecialReadable, _modifyHeaders, addUntouchable, checkCanDeserialize, checkCanSerialize, configure, configure, configure, configure, configure, disable, disable, disable, disable, disable, disable, enable, enable, enable, enable, enable, enable, findEncoding, findSuperTypes, findSuperTypes, getSize, hasMatchingMediaTypeForReading, hasMatchingMediaTypeForWriting, isEnabled, isReadable, isWriteable, locateMapper, readFrom, removeUntouchable, setAnnotationsToUse, setDefaultReadView, setDefaultView, setDefaultWriteView, setMapper, writeTo`

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

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

- - ### Field Detail

    - #### BASIC_ANNOTATIONS

          public static final Annotations[] BASIC_ANNOTATIONS

      Default annotation sets to use, if not explicitly defined during construction: only Jackson annotations are used for the base class. Sub-classes can use other settings.

    - #### _providers

          @Context
          protected javax.ws.rs.ext.Providers _providers

      Injectable context object used to locate configured instance of `ObjectMapper` to use for actual serialization.

  - ### Constructor Detail

    - #### JacksonSmileProvider

          public JacksonSmileProvider()

      Default constructor, usually used when provider is automatically configured to be used with JAX-RS implementation.

    - #### JacksonSmileProvider

          public JacksonSmileProvider(Annotations... annotationsToUse)

      Parameters:
        `annotationsToUse` - Annotation set(s) to use for configuring data binding

    - #### JacksonSmileProvider

          public JacksonSmileProvider(com.fasterxml.jackson.databind.ObjectMapper mapper)

    - #### JacksonSmileProvider

          public JacksonSmileProvider(com.fasterxml.jackson.databind.ObjectMapper mapper,
                                      Annotations[] annotationsToUse)

      Constructor to use when a custom mapper (usually components like serializer/deserializer factories that have been configured) is to be used.
      Parameters:
        `annotationsToUse` - Sets of annotations (Jackson, JAXB) that provider should support

  - ### Method Detail

    - #### version

          public com.fasterxml.jackson.core.Version version()

      Method that will return version information stored in and read from jar that contains this class.

    - #### hasMatchingMediaType

          protected boolean hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)

      Helper method used to check whether given media type is Smile type or sub type. Current implementation essentially checks to see whether `MediaType.getSubtype()` returns "smile" or something ending with "+smile".
      Specified by:
        `hasMatchingMediaType` in class `ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>`

    - #### _locateMapperViaProvider

          protected com.fasterxml.jackson.databind.ObjectMapper _locateMapperViaProvider(Class<?> type,
                                                                                         javax.ws.rs.core.MediaType mediaType)

      Method called to locate `ObjectMapper` to use for serialization and deserialization. If an instance has been explicitly defined by `ProviderBase.setMapper(MAPPER)` (or non-null instance passed in constructor), that will be used. If not, will try to locate it using standard JAX-RS `ContextResolver` mechanism, if it has been properly configured to access it (by JAX-RS runtime). Finally, if no mapper is found, will return a default unconfigured `ObjectMapper` instance (one constructed with default constructor and not modified in any way)
      Specified by:
        `_locateMapperViaProvider` in class `ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>`
      Parameters:
        `type` - Class of object being serialized or deserialized; not checked at this point, since it is assumed that unprocessable classes have been already weeded out, but will be passed to `ContextResolver` as is.
        `mediaType` - Declared media type for the instance to process: not used by this method, but will be passed to `ContextResolver` as is.

    - #### _configForReading

          protected SmileEndpointConfig _configForReading(com.fasterxml.jackson.databind.ObjectReader reader,
                                                          Annotation[] annotations)

      Specified by:
        `_configForReading` in class `ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>`

    - #### _configForWriting

          protected SmileEndpointConfig _configForWriting(com.fasterxml.jackson.databind.ObjectWriter writer,
                                                          Annotation[] annotations)

      Specified by:
        `_configForWriting` in class `ProviderBase<JacksonSmileProvider,com.fasterxml.jackson.databind.ObjectMapper,SmileEndpointConfig,SmileMapperConfigurator>`

Copyright © 2020 FasterXML. All rights reserved.