public abstract class SerializerProvider extends DatabindContext
ObjectMapper
and
JsonSerializer
s to obtain serializers capable of serializing
instances of specific types; as well as the default implementation
of the functionality.
Provider handles caching aspects of serializer handling; all construction
details are delegated to SerializerFactory
instance.
Object life-cycle is such that an initial instance ("blueprint") is created
and referenced by ObjectMapper
and ObjectWriter
intances;
but for actual usage, a configured instance is created by using
a create method in sub-class
DefaultSerializerProvider
.
Only this instance can be used for actual serialization calls; blueprint
object is only to be used for creating instances.
Modifier and Type | Field and Description |
---|---|
protected SerializationConfig |
_config
Serialization configuration to use for serialization processing.
|
protected DateFormat |
_dateFormat
Lazily acquired and instantiated formatter object: initialized
first time it is needed, reused afterwards.
|
protected JsonSerializer<Object> |
_keySerializer
Serializer used to output non-null keys of Maps (which will get
output as JSON Objects), if not null; if null, us the standard
default key serializer.
|
protected ReadOnlyClassToSerializerMap |
_knownSerializers
For fast lookups, we will have a local non-shared read-only
map that contains serializers previously fetched.
|
protected JsonSerializer<Object> |
_nullKeySerializer
Serializer used to (try to) output a null key, due to an entry of
Map having null key. |
protected JsonSerializer<Object> |
_nullValueSerializer
Serializer used to output a null value.
|
protected RootNameLookup |
_rootNames
Helper object for keeping track of introspected root names
|
protected Class<?> |
_serializationView
View used for currently active serialization, if any.
|
protected SerializerCache |
_serializerCache
Cache for doing type-to-value-serializer lookups.
|
protected SerializerFactory |
_serializerFactory
Factory used for constructing actual serializer instances.
|
protected JsonSerializer<Object> |
_unknownTypeSerializer
Serializer that gets called for values of types for which no
serializers can be constructed.
|
protected static boolean |
CACHE_UNKNOWN_MAPPINGS
Setting for determining whether mappings for "unknown classes" should be
cached for faster resolution.
|
static JsonSerializer<Object> |
DEFAULT_NULL_KEY_SERIALIZER |
static JsonSerializer<Object> |
DEFAULT_UNKNOWN_SERIALIZER |
protected static JavaType |
TYPE_OBJECT |
Modifier | Constructor and Description |
---|---|
|
SerializerProvider()
Constructor for creating master (or "blue-print") provider object,
which is only used as the template for constructing per-binding
instances.
|
protected |
SerializerProvider(SerializerProvider src,
SerializationConfig config,
SerializerFactory f)
"Copy-constructor", used by sub-classes.
|
Modifier and Type | Method and Description |
---|---|
protected JsonSerializer<Object> |
_createAndCacheUntypedSerializer(Class<?> type)
Method that will try to construct a value serializer; and if
one is successfully created, cache it for reuse.
|
protected JsonSerializer<Object> |
_createAndCacheUntypedSerializer(JavaType type) |
protected JsonSerializer<Object> |
_createUntypedSerializer(JavaType type) |
protected DateFormat |
_dateFormat() |
protected JsonSerializer<Object> |
_findExplicitUntypedSerializer(Class<?> runtimeType)
Method that will try to find a serializer, either from cache
or by constructing one; but will not return an "unknown" serializer
if this can not be done but rather returns null.
|
protected JsonSerializer<Object> |
_handleContextual(JsonSerializer<?> ser,
BeanProperty property) |
protected JsonSerializer<Object> |
_handleContextualResolvable(JsonSerializer<?> ser,
BeanProperty property)
Helper method called to resolve and contextualize given
serializer, if and as necessary.
|
protected JsonSerializer<Object> |
_handleResolvable(JsonSerializer<?> ser) |
protected void |
_reportIncompatibleRootType(Object value,
JavaType rootType) |
void |
defaultSerializeDateKey(Date date,
JsonGenerator jgen)
Method that will handle serialization of Dates used as
Map keys,
based on SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format) |
void |
defaultSerializeDateKey(long timestamp,
JsonGenerator jgen)
Method that will handle serialization of Dates used as
Map keys,
based on SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format) |
void |
defaultSerializeDateValue(Date date,
JsonGenerator jgen)
Method that will handle serialization of Date(-like) values, using
SerializationConfig settings to determine expected serialization
behavior. |
void |
defaultSerializeDateValue(long timestamp,
JsonGenerator jgen)
Method that will handle serialization of Date(-like) values, using
SerializationConfig settings to determine expected serialization
behavior. |
void |
defaultSerializeField(String fieldName,
Object value,
JsonGenerator jgen)
Convenience method that will serialize given field with specified
value.
|
void |
defaultSerializeNull(JsonGenerator jgen) |
void |
defaultSerializeValue(Object value,
JsonGenerator jgen)
Convenience method that will serialize given value (which can be
null) using standard serializer locating functionality.
|
JsonSerializer<Object> |
findKeySerializer(JavaType keyType,
BeanProperty property)
Method called to get the serializer to use for serializing
non-null Map keys.
|
JsonSerializer<Object> |
findNullKeySerializer(JavaType serializationType,
BeanProperty property)
Method called to find a serializer to use for null values for given
declared type.
|
JsonSerializer<Object> |
findNullValueSerializer(BeanProperty property)
Method called to get the serializer to use for serializing null
property values.
|
abstract WritableObjectId |
findObjectId(Object forPojo,
ObjectIdGenerator<?> generatorType)
Method called to find the Object Id for given POJO, if one
has been generated.
|
JsonSerializer<Object> |
findTypedValueSerializer(Class<?> valueType,
boolean cache,
BeanProperty property)
Method called to locate regular serializer, matching type serializer,
and if both found, wrap them in a serializer that calls both in correct
sequence.
|
JsonSerializer<Object> |
findTypedValueSerializer(JavaType valueType,
boolean cache,
BeanProperty property)
Method called to locate regular serializer, matching type serializer,
and if both found, wrap them in a serializer that calls both in correct
sequence.
|
JsonSerializer<Object> |
findValueSerializer(Class<?> valueType,
BeanProperty property)
Method called to get hold of a serializer for a value of given type;
or if no such serializer can be found, a default handler (which
may do a best-effort generic serialization or just simply
throw an exception when invoked).
|
JsonSerializer<Object> |
findValueSerializer(JavaType valueType,
BeanProperty property)
Similar to
findValueSerializer(Class,BeanProperty) , but takes
full generics-aware type instead of raw class. |
Class<?> |
getActiveView()
Accessor for locating currently active view, if any;
returns null if no view has been set.
|
AnnotationIntrospector |
getAnnotationIntrospector()
Convenience method for accessing serialization view in use (if any); equivalent to:
|
SerializationConfig |
getConfig()
Method for accessing configuration for the serialization processing.
|
JsonSerializer<Object> |
getDefaultNullKeySerializer() |
JsonSerializer<Object> |
getDefaultNullValueSerializer() |
FilterProvider |
getFilterProvider()
Convenience method for accessing provider to find serialization filters used,
equivalent to calling:
|
Locale |
getLocale()
Method for accessing default Locale to use: convenience method for
|
Class<?> |
getSerializationView()
Deprecated.
Since 2.2, use
getActiveView() instead. |
TimeZone |
getTimeZone()
Method for accessing default TimeZone to use: convenience method for
|
TypeFactory |
getTypeFactory() |
JsonSerializer<Object> |
getUnknownTypeSerializer(Class<?> unknownType)
Method called to get the serializer to use if provider
can not determine an actual type-specific serializer
to use; typically when none of
SerializerFactory
instances are able to construct a serializer. |
boolean |
isEnabled(SerializationFeature feature)
Convenience method for checking whether specified serialization
feature is enabled or not.
|
abstract JsonSerializer<Object> |
serializerInstance(Annotated annotated,
Object serDef)
Method that can be called to construct and configure serializer instance,
either given a
Class to instantiate (with default constructor),
or an uninitialized serializer instance. |
void |
setDefaultKeySerializer(JsonSerializer<Object> ks)
Method that can be used to specify serializer that will be
used to write JSON property names matching null keys for Java
Maps (which will throw an exception if try write such property
name)
|
void |
setNullKeySerializer(JsonSerializer<Object> nks)
Method that can be used to specify serializer to use for serializing
all non-null JSON property names, unless more specific key serializer
is found (i.e.
|
void |
setNullValueSerializer(JsonSerializer<Object> nvs)
Method that can be used to specify serializer that will be
used to write JSON values matching Java null values
instead of default one (which simply writes JSON null)
|
canOverrideAccessModifiers, constructSpecializedType, constructType, converterInstance, isEnabled, objectIdGeneratorInstance
protected static final JavaType TYPE_OBJECT
protected static final boolean CACHE_UNKNOWN_MAPPINGS
public static final JsonSerializer<Object> DEFAULT_NULL_KEY_SERIALIZER
public static final JsonSerializer<Object> DEFAULT_UNKNOWN_SERIALIZER
protected final SerializationConfig _config
protected final Class<?> _serializationView
protected final SerializerFactory _serializerFactory
protected final SerializerCache _serializerCache
protected final RootNameLookup _rootNames
protected JsonSerializer<Object> _unknownTypeSerializer
The default serializer will simply thrown an exception.
protected JsonSerializer<Object> _keySerializer
protected JsonSerializer<Object> _nullValueSerializer
JsonGenerator.writeNull()
.protected JsonSerializer<Object> _nullKeySerializer
Map
having null key.
The default implementation will throw an exception if this happens;
alternative implementation (like one that would write an Empty String)
can be defined.protected final ReadOnlyClassToSerializerMap _knownSerializers
protected DateFormat _dateFormat
public SerializerProvider()
protected SerializerProvider(SerializerProvider src, SerializationConfig config, SerializerFactory f)
src
- Blueprint object used as the baseline for this instancepublic void setDefaultKeySerializer(JsonSerializer<Object> ks)
public void setNullValueSerializer(JsonSerializer<Object> nvs)
public void setNullKeySerializer(JsonSerializer<Object> nks)
Note that key serializer registration are different from value serializer registrations.
public final SerializationConfig getConfig()
getConfig
in class DatabindContext
public final AnnotationIntrospector getAnnotationIntrospector()
DatabindContext
getConfig().getAnnotationIntrospector();
getAnnotationIntrospector
in class DatabindContext
public final TypeFactory getTypeFactory()
getTypeFactory
in class DatabindContext
public final Class<?> getActiveView()
DatabindContext
getActiveView
in class DatabindContext
@Deprecated public final Class<?> getSerializationView()
getActiveView()
instead.public final boolean isEnabled(SerializationFeature feature)
getConfig().isEnabled(feature);
public final FilterProvider getFilterProvider()
getConfig().getFilterProvider();
public Locale getLocale()
getConfig().getLocale();
public TimeZone getTimeZone()
getConfig().getTimeZone();
public abstract WritableObjectId findObjectId(Object forPojo, ObjectIdGenerator<?> generatorType)
public JsonSerializer<Object> findValueSerializer(Class<?> valueType, BeanProperty property) throws JsonMappingException
Note: this method is only called for non-null values; not for keys or null values. For these, check out other accessor methods.
Note that starting with version 1.5, serializers should also be type-aware
if they handle polymorphic types. That means that it may be necessary
to also use a TypeSerializer
based on declared (static) type
being serializer (whereas actual data may be serialized using dynamic
type)
JsonMappingException
- if there are fatal problems with
accessing suitable serializer; including that of not
finding any serializerpublic JsonSerializer<Object> findValueSerializer(JavaType valueType, BeanProperty property) throws JsonMappingException
findValueSerializer(Class,BeanProperty)
, but takes
full generics-aware type instead of raw class.
This is necessary for accurate handling of external type information,
to handle polymorphic types.property
- When creating secondary serializers, property for which
serializer is needed: annotations of the property (or bean that contains it)
may be checked to create contextual serializers.JsonMappingException
public JsonSerializer<Object> findTypedValueSerializer(Class<?> valueType, boolean cache, BeanProperty property) throws JsonMappingException
valueType
- Type for purpose of locating a serializer; usually dynamic
runtime type, but can also be static declared type, depending on configurationcache
- Whether resulting value serializer should be cached or not; this is just
a hintproperty
- When creating secondary serializers, property for which
serializer is needed: annotations of the property (or bean that contains it)
may be checked to create contextual serializers.JsonMappingException
public JsonSerializer<Object> findTypedValueSerializer(JavaType valueType, boolean cache, BeanProperty property) throws JsonMappingException
valueType
- Declared type of value being serialized (which may not
be actual runtime type); used for finding both value serializer and
type serializer to use for adding polymorphic type (if any)cache
- Whether resulting value serializer should be cached or not; this is just
a hintproperty
- When creating secondary serializers, property for which
serializer is needed: annotations of the property (or bean that contains it)
may be checked to create contextual serializers.JsonMappingException
public JsonSerializer<Object> findKeySerializer(JavaType keyType, BeanProperty property) throws JsonMappingException
findValueSerializer(java.lang.Class<?>, com.fasterxml.jackson.databind.BeanProperty)
method is because actual write
method must be different (@link JsonGenerator#writeFieldName};
but also since behavior for some key types may differ.
Note that the serializer itself can be called with instances of any Java object, but not nulls.
JsonMappingException
public JsonSerializer<Object> getDefaultNullKeySerializer()
public JsonSerializer<Object> getDefaultNullValueSerializer()
public JsonSerializer<Object> findNullKeySerializer(JavaType serializationType, BeanProperty property) throws JsonMappingException
JsonMappingException
public JsonSerializer<Object> findNullValueSerializer(BeanProperty property) throws JsonMappingException
Default implementation simply calls getDefaultNullValueSerializer()
;
can be overridden to add custom null serialization for properties
of certain type or name.
JsonMappingException
public JsonSerializer<Object> getUnknownTypeSerializer(Class<?> unknownType)
SerializerFactory
instances are able to construct a serializer.
Typically, returned serializer will throw an exception,
although alternatively ToStringSerializer
could be returned as well.
unknownType
- Type for which no serializer is foundpublic abstract JsonSerializer<Object> serializerInstance(Annotated annotated, Object serDef) throws JsonMappingException
Class
to instantiate (with default constructor),
or an uninitialized serializer instance.
Either way, serialize will be properly resolved
(via ResolvableSerializer
) and/or contextualized
(via ContextualSerializer
) as necessary.annotated
- Annotated entity that contained definitionserDef
- Serializer definition: either an instance or classJsonMappingException
public final void defaultSerializeValue(Object value, JsonGenerator jgen) throws IOException, JsonProcessingException
defaultSerializeField(java.lang.String, java.lang.Object, com.fasterxml.jackson.core.JsonGenerator)
instead.IOException
JsonProcessingException
public final void defaultSerializeField(String fieldName, Object value, JsonGenerator jgen) throws IOException, JsonProcessingException
IOException
JsonProcessingException
public final void defaultSerializeDateValue(long timestamp, JsonGenerator jgen) throws IOException, JsonProcessingException
SerializationConfig
settings to determine expected serialization
behavior.
Note: date here means "full" date, that is, date AND time, as per
Java convention (and not date-only values like in SQL)IOException
JsonProcessingException
public final void defaultSerializeDateValue(Date date, JsonGenerator jgen) throws IOException, JsonProcessingException
SerializationConfig
settings to determine expected serialization
behavior.
Note: date here means "full" date, that is, date AND time, as per
Java convention (and not date-only values like in SQL)IOException
JsonProcessingException
public void defaultSerializeDateKey(long timestamp, JsonGenerator jgen) throws IOException, JsonProcessingException
Map
keys,
based on SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format)IOException
JsonProcessingException
public void defaultSerializeDateKey(Date date, JsonGenerator jgen) throws IOException, JsonProcessingException
Map
keys,
based on SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format)IOException
JsonProcessingException
public final void defaultSerializeNull(JsonGenerator jgen) throws IOException, JsonProcessingException
IOException
JsonProcessingException
protected void _reportIncompatibleRootType(Object value, JavaType rootType) throws IOException, JsonProcessingException
IOException
JsonProcessingException
protected JsonSerializer<Object> _findExplicitUntypedSerializer(Class<?> runtimeType) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _createAndCacheUntypedSerializer(Class<?> type) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _createAndCacheUntypedSerializer(JavaType type) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _createUntypedSerializer(JavaType type) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _handleContextualResolvable(JsonSerializer<?> ser, BeanProperty property) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _handleResolvable(JsonSerializer<?> ser) throws JsonMappingException
JsonMappingException
protected JsonSerializer<Object> _handleContextual(JsonSerializer<?> ser, BeanProperty property) throws JsonMappingException
JsonMappingException
protected final DateFormat _dateFormat()
Copyright © 2012-2013 FasterXML. All Rights Reserved.