SerializerFactory.java
package tools.jackson.databind.ser;
import com.fasterxml.jackson.annotation.JsonFormat;
import tools.jackson.databind.*;
/**
* Abstract class that defines API used by {@link SerializationContext}
* to obtain actual
* {@link ValueSerializer} instances from multiple distinct factories.
*/
public abstract class SerializerFactory
{
/*
/**********************************************************************
/* Basic `SerializerFactory` API
/**********************************************************************
*/
/**
* Method called to create (or, for immutable serializers, reuse) a serializer for given type.
*
* @param ctxt (not null) Context that needs to be used to resolve annotation-provided
* serializers (but NOT for others)
* @param formatOverride (nullable) Possible format overrides (from property annotations)
* to use, above and beyond what `beanDesc` defines
*
* @since 3.0 (last argument added)
*/
public abstract ValueSerializer<Object> createSerializer(SerializationContext ctxt,
JavaType baseType, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverride);
/**
* Method called to create serializer to use for serializing JSON property names (which must
* be output as <code>JsonToken.FIELD_NAME</code>) for Map that has specified declared
* key type, and is for specified property (or, if property is null, as root value)
*
* @param type Declared type for Map keys
*
* @return Serializer to use, if factory knows it; null if not (in which case default
* serializer is to be used)
*/
public abstract ValueSerializer<Object> createKeySerializer(SerializationContext ctxt,
JavaType type);
/**
* Returns serializer used to (try to) output a null key, due to an entry of
* {@link java.util.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.
*/
public abstract ValueSerializer<Object> getDefaultNullKeySerializer();
public abstract ValueSerializer<Object> getDefaultNullValueSerializer();
/*
/**********************************************************************
/* Additional mutant factories for registering serializer overrides
/**********************************************************************
*/
/**
* Mutant factory method for creating a new factory instance with additional serializer
* provider: provider will get inserted as the first one to be checked.
*/
public abstract SerializerFactory withAdditionalSerializers(Serializers additional);
/**
* Mutant factory method for creating a new factory instance with additional key serializer
* provider: provider will get inserted as the first one to be checked.
*/
public abstract SerializerFactory withAdditionalKeySerializers(Serializers additional);
/**
* Mutant factory method for creating a new factory instance with additional serializer modifier:
* modifier will get inserted as the first one to be checked.
*/
public abstract SerializerFactory withSerializerModifier(ValueSerializerModifier modifier);
/**
* @since 3.0
*/
public abstract SerializerFactory withNullValueSerializer(ValueSerializer<?> nvs);
/**
* @since 3.0
*/
public abstract SerializerFactory withNullKeySerializer(ValueSerializer<?> nks);
/*
/**********************************************************************
/* Deprecated (for 2.x migration, compatibility)
/**********************************************************************
*/
/**
* @deprecated Since 3.0 use variant that takes {@code JsonFormat.Value} argument
*/
@Deprecated // since 3.0
public ValueSerializer<Object> createSerializer(SerializationContext ctxt, JavaType baseType)
{
return createSerializer(ctxt, baseType,
ctxt.lazyIntrospectBeanDescription(baseType), null);
}
}