package com.fasterxml.jackson.databind.ser;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* Interface that defines API for filter objects use (as configured
* using {@link com.fasterxml.jackson.annotation.JsonFilter})
* for filtering bean properties to serialize.
*<p>
* Note that Jackson 2.1 added two new methods -- as a result, it is
* strongly recommended that custom implementations extend
* {@link com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter},
* to avoid backwards compatibility issues in future.
*/
public interface BeanPropertyFilter
{
/**
* Method called by {@link BeanSerializer} to let filter decide what to do with
* given bean property value: the usual choices are to either filter out (i.e.
* do nothing) or write using given {@link BeanPropertyWriter}, although filters
* can choose other to do something different altogether.
*
* @param bean Bean of which property value to serialize
* @param jgen Generator use for serializing value
* @param prov Provider that can be used for accessing dynamic aspects of serialization
* processing
* @param writer Default bean property serializer to use
*/
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov,
BeanPropertyWriter writer)
throws Exception;
/**
* Method called by {@link BeanSerializer} to let the filter determine whether, and in what
* form the given property exist within the parent, or root, schema. Filters can omit
* adding the property to the node, or choose the form of the schema value for the property.
*<p>
* Typical implementation is something like:
*<pre>
* if (include(writer)) {
* writer.depositSchemaProperty(propertiesNode, provider);
* }
*</pre>
*
* @param writer Bean property serializer to use to create schema value
* @param propertiesNode Node which the given property would exist within
* @param provider Provider that can be used for accessing dynamic aspects of serialization
* processing
*
* @since 2.1
*/
public void depositSchemaProperty(BeanPropertyWriter writer, ObjectNode propertiesNode,
SerializerProvider provider)
throws JsonMappingException;
/**
* Method called by {@link BeanSerializer} to let the filter determine whether, and in what
* form the given property exist within the parent, or root, schema. Filters can omit
* adding the property to the node, or choose the form of the schema value for the property
*<p>
* Typical implementation is something like:
*<pre>
* if (include(writer)) {
* writer.depositSchemaProperty(objectVisitor, provider);
* }
*</pre>
*
* @param writer Bean property serializer to use to create schema value
* @param objectVisitor JsonObjectFormatVisitor which should be aware of
* the property's existence
* @param provider Provider that can be used for accessing dynamic aspects of serialization
* processing
*
* @since 2.1
*/
public void depositSchemaProperty(BeanPropertyWriter writer, JsonObjectFormatVisitor objectVisitor,
SerializerProvider provider)
throws JsonMappingException;
}