com.fasterxml.jackson.jaxrs.json

## Class JacksonJsonProvider

- java.lang.Object
- - com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>
  - - com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider

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

Direct Known Subclasses:
  JacksonJaxbJsonProvider

    @Provider
     @Consumes(value="*/*")
     @Produces(value="*/*")
    public class JacksonJsonProvider
    extends com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>

Basic implementation of JAX-RS abstractions (`MessageBodyReader`, `MessageBodyWriter`) needed for binding JSON ("application/json") 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: version 1.3 added a sub-class (`JacksonJaxbJsonProvider`) which 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
`protected String` `_jsonpFunctionName` JSONP function name to use for automatic JSONP wrapping, if any; if null, no JSONP wrapping is done.
`protected javax.ws.rs.ext.Providers` `_providers` Injectable context object used to locate configured instance of `ObjectMapper` to use for actual serialization.
`static com.fasterxml.jackson.jaxrs.cfg.Annotations[]` `BASIC_ANNOTATIONS` Default annotation sets to use, if not explicitly defined during construction: only Jackson annotations are used for the base class.
`static String` `MIME_JAVASCRIPT`
`static String` `MIME_JAVASCRIPT_MS`

### 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
`JacksonJsonProvider()` Default constructor, usually used when provider is automatically configured to be used with JAX-RS implementation.
`JacksonJsonProvider(com.fasterxml.jackson.jaxrs.cfg.Annotations... annotationsToUse)`
`JacksonJsonProvider(com.fasterxml.jackson.databind.ObjectMapper mapper)`
`JacksonJsonProvider(com.fasterxml.jackson.databind.ObjectMapper mapper, com.fasterxml.jackson.jaxrs.cfg.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
`protected JsonEndpointConfig` `_configForReading(com.fasterxml.jackson.databind.ObjectReader reader, Annotation[] annotations)`
`protected JsonEndpointConfig` `_configForWriting(com.fasterxml.jackson.databind.ObjectWriter writer, Annotation[] annotations)`
`protected com.fasterxml.jackson.databind.ObjectMapper` `_locateMapperViaProvider(Class<?> type, javax.ws.rs.core.MediaType mediaType)`
`protected boolean` `hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)` Helper method used to check whether given media type is supported by this provider.
`void` `setJSONPFunctionName(String fname)`
`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

#### MIME_JAVASCRIPT

    public static final String MIME_JAVASCRIPT

See Also:
  Constant Field Values

#### MIME_JAVASCRIPT_MS

    public static final String MIME_JAVASCRIPT_MS

See Also:
  Constant Field Values

#### BASIC_ANNOTATIONS

    public static final com.fasterxml.jackson.jaxrs.cfg.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.

#### _jsonpFunctionName

    protected String _jsonpFunctionName

JSONP function name to use for automatic JSONP wrapping, if any; if null, no JSONP wrapping is done. Note that this is the default value that can be overridden on per-endpoint basis.

#### _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

#### JacksonJsonProvider

    public JacksonJsonProvider()

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

#### JacksonJsonProvider

    public JacksonJsonProvider(com.fasterxml.jackson.jaxrs.cfg.Annotations... annotationsToUse)

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

#### JacksonJsonProvider

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

#### JacksonJsonProvider

    public JacksonJsonProvider(com.fasterxml.jackson.databind.ObjectMapper mapper,
                               com.fasterxml.jackson.jaxrs.cfg.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.

#### setJSONPFunctionName

    public void setJSONPFunctionName(String fname)

#### hasMatchingMediaType

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

Helper method used to check whether given media type is supported by this provider. Current implementation essentially checks to see whether `MediaType.getSubtype()` returns "json" or something ending with "+json". Or "text/x-json" (since 2.3)

Specified by:
  `hasMatchingMediaType` in class `com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>`
Since:
  2.2

#### _locateMapperViaProvider

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

Specified by:
  `_locateMapperViaProvider` in class `com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>`

#### _configForReading

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

Specified by:
  `_configForReading` in class `com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>`

#### _configForWriting

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

Specified by:
  `_configForWriting` in class `com.fasterxml.jackson.jaxrs.base.ProviderBase<JacksonJsonProvider,com.fasterxml.jackson.databind.ObjectMapper,JsonEndpointConfig,JsonMapperConfigurator>`