All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.jackson.databind.cfg.HandlerInstantiator Maven / Gradle / Ivy

There is a newer version: 2.17.0
Show newest version
package com.fasterxml.jackson.databind.cfg;

import com.fasterxml.jackson.annotation.ObjectIdGenerator;
import com.fasterxml.jackson.annotation.ObjectIdResolver;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.ValueInstantiator;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.jsontype.TypeIdResolver;
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter;
import com.fasterxml.jackson.databind.util.Converter;

/**
 * Helper class used for handling details of creating handler instances (things
 * like {@link JsonSerializer}s, {@link JsonDeserializer}s, various type
 * handlers) of specific types. Actual handler type has been resolved at this
 * point, so instantiator is strictly responsible for providing a configured
 * instance by constructing and configuring a new instance, or possibly by
 * recycling a shared instance. One use case is that of allowing
 * dependency injection, which would otherwise be difficult to do.
 *

* Custom instances are allowed to return null to indicate that caller should * use the default instantiation handling (which just means calling no-argument * constructor via reflection). *

* Care has to be taken to ensure that if instance returned is shared, it will * be thread-safe; caller will not synchronize access to returned instances. */ public abstract class HandlerInstantiator { /* /********************************************************** /* Public API /********************************************************** */ /** * Method called to get an instance of deserializer of specified type. * * @param config Deserialization configuration in effect * @param annotated Element (Class, Method, Field, constructor parameter) that * had annotation defining class of deserializer to construct (to allow * implementation use information from other annotations) * @param deserClass Class of deserializer instance to return * * @return Deserializer instance to use */ public abstract JsonDeserializer deserializerInstance(DeserializationConfig config, Annotated annotated, Class deserClass); /** * Method called to get an instance of key deserializer of specified type. * * @param config Deserialization configuration in effect * @param annotated Element (Class, Method, Field, constructor parameter) that * had annotation defining class of key deserializer to construct (to allow * implementation use information from other annotations) * @param keyDeserClass Class of key deserializer instance to return * * @return Key deserializer instance to use */ public abstract KeyDeserializer keyDeserializerInstance(DeserializationConfig config, Annotated annotated, Class keyDeserClass); /** * Method called to get an instance of serializer of specified type. * * @param config Serialization configuration in effect * @param annotated Element (Class, Method, Field) that * had annotation defining class of serializer to construct (to allow * implementation use information from other annotations) * @param serClass Class of serializer instance to return * * @return Serializer instance to use */ public abstract JsonSerializer serializerInstance(SerializationConfig config, Annotated annotated, Class serClass); /** * Method called to get an instance of TypeResolverBuilder of specified type. * * @param config Mapper configuration in effect (either SerializationConfig or * DeserializationConfig, depending on when instance is being constructed) * @param annotated annotated Element (Class, Method, Field) that * had annotation defining class of builder to construct (to allow * implementation use information from other annotations) * @param builderClass Class of builder instance to return * * @return TypeResolverBuilder instance to use */ public abstract TypeResolverBuilder typeResolverBuilderInstance(MapperConfig config, Annotated annotated, Class builderClass); /** * Method called to get an instance of TypeIdResolver of specified type. * * @param config Mapper configuration in effect (either SerializationConfig or * DeserializationConfig, depending on when instance is being constructed) * @param annotated annotated Element (Class, Method, Field) that * had annotation defining class of resolver to construct (to allow * implementation use information from other annotations) * @param resolverClass Class of resolver instance to return * * @return TypeResolverBuilder instance to use */ public abstract TypeIdResolver typeIdResolverInstance(MapperConfig config, Annotated annotated, Class resolverClass); /** * Method called to construct an instance of ValueInstantiator of specified type. */ public ValueInstantiator valueInstantiatorInstance(MapperConfig config, Annotated annotated, Class resolverClass) { return null; } /** * Method called to construct a ObjectIdHandler instance of specified type. * * @since 2.0 */ public ObjectIdGenerator objectIdGeneratorInstance(MapperConfig config, Annotated annotated, Class implClass) { return null; } public ObjectIdResolver resolverIdGeneratorInstance(MapperConfig config, Annotated annotated, Class implClass) { return null; } /** * Method called to construct a NamingStrategy instance used for specified * class. * * @since 2.1 */ public PropertyNamingStrategy namingStrategyInstance(MapperConfig config, Annotated annotated, Class implClass) { return null; } /** * Method called to construct a Converter instance used for specified class. * * @since 2.2 */ public Converter converterInstance(MapperConfig config, Annotated annotated, Class implClass) { return null; } /** * Method called to construct a {@link VirtualBeanPropertyWriter} instance * of specified type. * * @since 2.5 */ public VirtualBeanPropertyWriter virtualPropertyWriterInstance(MapperConfig config, Class implClass) { return null; } /** * Method called to construct a Filter (any Object with implementation of * equals(Object) that determines if given value is to be * excluded (true) or included (false)) to be used based on * {@link com.fasterxml.jackson.annotation.JsonInclude} annotation (or * equivalent). *

* Default implementation returns `null` to indicate that default instantiation * (use zero-arg constructor of the filterClass) should be * used. * * @since 2.9 */ public Object includeFilterInstance(SerializationConfig config, BeanPropertyDefinition forProperty, Class filterClass) { return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy