org.codehaus.jackson.map.JsonSerializer Maven / Gradle / Ivy
package org.codehaus.jackson.map;
import java.io.IOException;
import org.codehaus.jackson.*;
/**
* Abstract class that defines API used by {@link ObjectMapper} (and
* other chained {@link JsonSerializer}s too) to serialize Objects of
* arbitrary types into JSON, using provided {@link JsonGenerator}.
*/
public abstract class JsonSerializer
{
/**
* Method that can be called to ask implementation to serialize
* values of type this serializer handles.
*
* @param value Value to serialize; can not be null.
* @param jgen Generator used to output resulting Json content
* @param provider Provider that can be used to get serializers for
* serializing Objects value contains, if any.
*/
public abstract void serialize(T value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException;
/**
* Method that can be called to ask implementation to serialize
* values of type this serializer handles, using specified type serializer
* for embedding necessary type information.
*
* Default implementation will ignore serialization of type information,
* and just calls {@link #serialize}: serializers that can embed
* type information should override this to implement actual handling.
* Most common such handling is done by something like:
*
* // note: method to call depends on whether this type is serialized as JSON scalar, object or Array!
* typeSer.writeTypePrefixForScalar(value, jgen);
* serialize(value, jgen, provider);
* typeSer.writeTypeSuffixForScalar(value, jgen);
*
*
* @param value Value to serialize; can not be null.
* @param jgen Generator used to output resulting Json content
* @param provider Provider that can be used to get serializers for
* serializing Objects value contains, if any.
* @param typeSer Type serializer to use for including type information
*
* @since 1.5
*/
public void serializeWithType(T value, JsonGenerator jgen, SerializerProvider provider,
TypeSerializer typeSer)
throws IOException, JsonProcessingException
{
serialize(value, jgen, provider);
}
/*
/**********************************************************
* Introspection methods needed for type handling
/**********************************************************
*/
/**
* Method for accessing type of Objects this serializer can handle.
*
* Default implementation will return null, which essentially means
* same as returning Object.class
would; that is, that
* nothing is known about handled type.
*/
public Class handledType() { return null; }
/*
/**********************************************************
/* Helper class(es)
/**********************************************************
*/
/**
* This marker class is only to be used with annotations, to
* indicate that no serializer is configured.
*
* Specifically, this class is to be used as the marker for
* annotation {@link org.codehaus.jackson.map.annotate.JsonSerialize}.
*/
public abstract static class None
extends JsonSerializer