public class StdSerializerProvider extends SerializerProvider
SerializerProvider implementation. Handles
caching aspects of serializer handling; all construction details
are delegated to SerializerFactory instance.
One note about implementation: the main instance constructed will
be so-called "blueprint" object, and will NOT be used during actual
serialization. Rather, an "instance" instance is created so that
state can be carried along, as well as to avoid synchronization
during serializer access. Because of this, if sub-classing, one
must override method createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory): if this is not done,
an exception will get thrown as base class verifies that the
instance has same class as the blueprint
(instance.getClass() == blueprint.getClass()).
Check is done to prevent weird bugs that would otherwise occur.
Starting with version 1.5, provider is also responsible for some parts of type serialization; specifically for locating proper type serializers to use for types.
| 限定符和类型 | 字段和说明 |
|---|---|
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 SerializerCache |
_serializerCache
Cache for doing type-to-value-serializer lookups.
|
protected SerializerFactory |
_serializerFactory |
protected JsonSerializer<Object> |
_unknownTypeSerializer
Serializer that gets called for values of types for which no
serializers can be constructed.
|
static JsonSerializer<Object> |
DEFAULT_KEY_SERIALIZER
已过时。
Since 1.9, use
StdKeySerializers instead |
static JsonSerializer<Object> |
DEFAULT_NULL_KEY_SERIALIZER |
static JsonSerializer<Object> |
DEFAULT_UNKNOWN_SERIALIZER |
_config, _serializationView, TYPE_OBJECT| 限定符 | 构造器和说明 |
|---|---|
|
StdSerializerProvider()
Constructor for creating master (or "blue-print") provider object,
which is only used as the template for constructing per-binding
instances.
|
protected |
StdSerializerProvider(SerializationConfig config,
StdSerializerProvider src,
SerializerFactory f)
"Copy-constructor", used from
createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory) (or by
sub-classes) |
| 限定符和类型 | 方法和说明 |
|---|---|
protected JsonSerializer<Object> |
_createAndCacheUntypedSerializer(Class<?> type,
BeanProperty property)
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,
BeanProperty property) |
protected JsonSerializer<Object> |
_createUntypedSerializer(JavaType type,
BeanProperty property) |
protected JsonSerializer<Object> |
_findExplicitUntypedSerializer(Class<?> runtimeType,
BeanProperty property)
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> |
_handleContextualResolvable(JsonSerializer<Object> ser,
BeanProperty property) |
protected void |
_reportIncompatibleRootType(Object value,
JavaType rootType) |
protected void |
_serializeValue(JsonGenerator jgen,
Object value)
Method called on the actual non-blueprint provider instance object,
to kick off the serialization.
|
protected void |
_serializeValue(JsonGenerator jgen,
Object value,
JavaType rootType)
Method called on the actual non-blueprint provider instance object,
to kick off the serialization, when root type is explicitly
specified and not determined from value.
|
int |
cachedSerializersCount()
Method that can be used to determine how many serializers this
provider is caching currently
(if it does caching: default implementation does)
Exact count depends on what kind of serializers get cached;
default implementation caches all serializers, including ones that
are eagerly constructed (for optimal access speed)
The main use case for this method is to allow conditional flushing of
serializer cache, if certain number of entries is reached.
|
protected StdSerializerProvider |
createInstance(SerializationConfig config,
SerializerFactory jsf)
Overridable method, used to create a non-blueprint instances from the blueprint.
|
void |
defaultSerializeDateKey(Date date,
JsonGenerator jgen)
Method that will handle serialization of Dates used as
Map keys,
based on SerializationConfig.Feature.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 SerializationConfig.Feature.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. |
JsonSerializer<Object> |
findKeySerializer(JavaType keyType,
BeanProperty property)
Method called to get the serializer to use for serializing
non-null Map keys.
|
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)
This variant was added in 1.5, to allow for efficient access using full
structured types, not just classes.
|
void |
flushCachedSerializers()
Method that will drop all serializers currently cached by this provider.
|
JsonSchema |
generateJsonSchema(Class<?> type,
SerializationConfig config,
SerializerFactory jsf)
Generate Json-schema for
given type.
|
JsonSerializer<Object> |
getNullKeySerializer()
Method called to get the serializer to use for serializing
Map keys that are nulls: this is needed since JSON does not allow
any non-String value as key, including null.
|
JsonSerializer<Object> |
getNullValueSerializer()
Method called to get the serializer to use for serializing
values (root level, Array members or List field values)
that are nulls.
|
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 |
hasSerializerFor(SerializationConfig config,
Class<?> cls,
SerializerFactory jsf)
Method that can be called to see if this serializer provider
can find a serializer for an instance of given class.
|
void |
serializeValue(SerializationConfig config,
JsonGenerator jgen,
Object value,
JavaType rootType,
SerializerFactory jsf)
The method to be called by
ObjectMapper to
execute recursive serialization, using serializers that
this provider has access to; and using specified root type
for locating first-level serializer. |
void |
serializeValue(SerializationConfig config,
JsonGenerator jgen,
Object value,
SerializerFactory jsf)
The method to be called by
ObjectMapper to
execute recursive serialization, using serializers that
this provider has access to. |
void |
setDefaultKeySerializer(JsonSerializer<Object> ks)
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. if not custom key serializer has been registered for
Java type).
|
void |
setNullKeySerializer(JsonSerializer<Object> nks)
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 |
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)
|
constructSpecializedType, constructType, defaultSerializeField, defaultSerializeNull, defaultSerializeValue, findTypedValueSerializer, findTypedValueSerializer, findValueSerializer, findValueSerializer, getConfig, getFilterProvider, getKeySerializer, getKeySerializer, getSerializationView, isEnabledpublic static final JsonSerializer<Object> DEFAULT_NULL_KEY_SERIALIZER
@Deprecated public static final JsonSerializer<Object> DEFAULT_KEY_SERIALIZER
StdKeySerializers insteadpublic static final JsonSerializer<Object> DEFAULT_UNKNOWN_SERIALIZER
protected final SerializerFactory _serializerFactory
protected final SerializerCache _serializerCache
protected final RootNameLookup _rootNames
protected JsonSerializer<Object> _unknownTypeSerializer
The default serializer will simply thrown an exception; a possible
alternative that can be used would be
ToStringSerializer.
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 StdSerializerProvider()
protected StdSerializerProvider(SerializationConfig config, StdSerializerProvider src, SerializerFactory f)
createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory) (or by
sub-classes)src - Blueprint object used as the baseline for this instanceprotected StdSerializerProvider createInstance(SerializationConfig config, SerializerFactory jsf)
public void setDefaultKeySerializer(JsonSerializer<Object> ks)
SerializerProviderNote that key serializer registration are different from value serializer registrations.
public void setNullValueSerializer(JsonSerializer<Object> nvs)
SerializerProvidersetNullValueSerializer 在类中 SerializerProviderpublic void setNullKeySerializer(JsonSerializer<Object> nks)
SerializerProvidersetNullKeySerializer 在类中 SerializerProviderpublic final void serializeValue(SerializationConfig config, JsonGenerator jgen, Object value, SerializerFactory jsf) throws IOException, JsonGenerationException
SerializerProviderObjectMapper to
execute recursive serialization, using serializers that
this provider has access to.serializeValue 在类中 SerializerProviderjsf - Underlying factory object used for creating serializers
as neededIOExceptionJsonGenerationExceptionpublic final void serializeValue(SerializationConfig config, JsonGenerator jgen, Object value, JavaType rootType, SerializerFactory jsf) throws IOException, JsonGenerationException
SerializerProviderObjectMapper to
execute recursive serialization, using serializers that
this provider has access to; and using specified root type
for locating first-level serializer.serializeValue 在类中 SerializerProviderrootType - Type to use for locating serializer to use, instead of actual
runtime type. Must be actual type, or one of its super typesIOExceptionJsonGenerationExceptionpublic JsonSchema generateJsonSchema(Class<?> type, SerializationConfig config, SerializerFactory jsf) throws JsonMappingException
SerializerProvidergenerateJsonSchema 在类中 SerializerProvidertype - The type for which to generate schemaJsonMappingExceptionpublic boolean hasSerializerFor(SerializationConfig config, Class<?> cls, SerializerFactory jsf)
SerializerProviderNote that no Exceptions are thrown, including unchecked ones: implementations are to swallow exceptions if necessary.
hasSerializerFor 在类中 SerializerProviderpublic int cachedSerializersCount()
SerializerProviderThe main use case for this method is to allow conditional flushing of serializer cache, if certain number of entries is reached.
cachedSerializersCount 在类中 SerializerProviderpublic void flushCachedSerializers()
SerializerProviderflushCachedSerializers 在类中 SerializerProviderpublic JsonSerializer<Object> findValueSerializer(Class<?> valueType, BeanProperty property) throws JsonMappingException
SerializerProviderNote: 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)
findValueSerializer 在类中 SerializerProviderJsonMappingException - 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 在类中 SerializerProviderJsonMappingExceptionpublic JsonSerializer<Object> findTypedValueSerializer(Class<?> valueType, boolean cache, BeanProperty property) throws JsonMappingException
SerializerProviderfindTypedValueSerializer 在类中 SerializerProvidercache - Whether resulting value serializer should be cached or not; this is just
a hintvalueType - Type for purpose of locating a serializer; usually dynamic
runtime type, but can also be static declared type, depending on configurationJsonMappingExceptionpublic JsonSerializer<Object> findTypedValueSerializer(JavaType valueType, boolean cache, BeanProperty property) throws JsonMappingException
SerializerProviderfindTypedValueSerializer 在类中 SerializerProvidervalueType - 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 hintJsonMappingExceptionpublic JsonSerializer<Object> findKeySerializer(JavaType keyType, BeanProperty property) throws JsonMappingException
SerializerProviderSerializerProvider.findValueSerializer(java.lang.Class<?>, org.codehaus.jackson.map.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.
findKeySerializer 在类中 SerializerProviderJsonMappingExceptionpublic JsonSerializer<Object> getNullKeySerializer()
SerializerProviderTypically, returned serializer will either throw an exception, or use an empty String; but other behaviors are possible.
getNullKeySerializer 在类中 SerializerProviderpublic JsonSerializer<Object> getNullValueSerializer()
SerializerProviderTypically returned serializer just writes out Json literal null value.
getNullValueSerializer 在类中 SerializerProviderpublic JsonSerializer<Object> getUnknownTypeSerializer(Class<?> unknownType)
SerializerProviderSerializerFactory
instances are able to construct a serializer.
Typically, returned serializer will throw an exception,
although alternatively ToStringSerializer could
be returned as well.
getUnknownTypeSerializer 在类中 SerializerProviderunknownType - Type for which no serializer is foundpublic final void defaultSerializeDateValue(long timestamp,
JsonGenerator jgen)
throws IOException,
JsonProcessingException
SerializerProviderSerializationConfig 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)defaultSerializeDateValue 在类中 SerializerProvidertimestamp - Millisecond timestamp that defines date, if available;IOExceptionJsonProcessingExceptionpublic final void defaultSerializeDateValue(Date date, JsonGenerator jgen) throws IOException, JsonProcessingException
SerializerProviderSerializationConfig 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)public void defaultSerializeDateKey(long timestamp,
JsonGenerator jgen)
throws IOException,
JsonProcessingException
SerializerProviderMap keys,
based on SerializationConfig.Feature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format)public void defaultSerializeDateKey(Date date, JsonGenerator jgen) throws IOException, JsonProcessingException
SerializerProviderMap keys,
based on SerializationConfig.Feature.WRITE_DATE_KEYS_AS_TIMESTAMPS
value (and if using textual representation, configured date format)protected void _serializeValue(JsonGenerator jgen, Object value) throws IOException, JsonProcessingException
protected void _serializeValue(JsonGenerator jgen, Object value, JavaType rootType) throws IOException, JsonProcessingException
protected void _reportIncompatibleRootType(Object value, JavaType rootType) throws IOException, JsonProcessingException
protected JsonSerializer<Object> _findExplicitUntypedSerializer(Class<?> runtimeType, BeanProperty property)
protected JsonSerializer<Object> _createAndCacheUntypedSerializer(Class<?> type, BeanProperty property) throws JsonMappingException
protected JsonSerializer<Object> _createAndCacheUntypedSerializer(JavaType type, BeanProperty property) throws JsonMappingException
JsonMappingExceptionprotected JsonSerializer<Object> _createUntypedSerializer(JavaType type, BeanProperty property) throws JsonMappingException
protected JsonSerializer<Object> _handleContextualResolvable(JsonSerializer<Object> ser, BeanProperty property) throws JsonMappingException
JsonMappingException