com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter Maven / Gradle / Ivy
Show all versions of jersey-all Show documentation
package com.fasterxml.jackson.databind.ser.impl;
import java.util.*;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
import com.fasterxml.jackson.databind.ser.*;
/**
* Simple {@link PropertyFilter} implementation that only uses property name
* to determine whether to serialize property as is, or to filter it out.
*
* Use of this class as the base implementation for any custom
* {@link PropertyFilter} implementations is strongly encouraged,
* because it can provide default implementation for any methods that may
* be added in {@link PropertyFilter} (as unfortunate as additions may be).
*/
public class SimpleBeanPropertyFilter
implements BeanPropertyFilter, PropertyFilter
// sub-classes must also implement java.io.Serializable
{
/*
/**********************************************************
/* Life-cycle
/**********************************************************
*/
protected SimpleBeanPropertyFilter() { }
/**
* Convenience factory method that will return a "no-op" filter that will
* simply just serialize all properties that are given, and filter out
* nothing.
*
* @since 2.5
*/
public static SimpleBeanPropertyFilter serializeAll(Set properties) {
return new FilterExceptFilter(properties);
}
/**
* Factory method to construct filter that filters out all properties except
* ones includes in set
*/
public static SimpleBeanPropertyFilter filterOutAllExcept(Set properties) {
return new FilterExceptFilter(properties);
}
public static SimpleBeanPropertyFilter filterOutAllExcept(String... propertyArray) {
HashSet properties = new HashSet(propertyArray.length);
Collections.addAll(properties, propertyArray);
return new FilterExceptFilter(properties);
}
public static SimpleBeanPropertyFilter serializeAllExcept(Set properties) {
return new SerializeExceptFilter(properties);
}
public static SimpleBeanPropertyFilter serializeAllExcept(String... propertyArray) {
HashSet properties = new HashSet(propertyArray.length);
Collections.addAll(properties, propertyArray);
return new SerializeExceptFilter(properties);
}
/**
* Helper method to ease transition from {@link BeanPropertyWriter} into
* {@link PropertyWriter}
*
* @since 2.3
*/
@SuppressWarnings("deprecation")
public static PropertyFilter from(final BeanPropertyFilter src)
{
return new PropertyFilter() {
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen,
SerializerProvider prov, PropertyWriter writer)
throws Exception {
src.serializeAsField(pojo, jgen, prov, (BeanPropertyWriter) writer);
}
@Override
public void depositSchemaProperty(PropertyWriter writer,
ObjectNode propertiesNode, SerializerProvider provider)
throws JsonMappingException {
src.depositSchemaProperty((BeanPropertyWriter) writer, propertiesNode, provider);
}
@Override
public void depositSchemaProperty(PropertyWriter writer,
JsonObjectFormatVisitor objectVisitor,
SerializerProvider provider) throws JsonMappingException {
src.depositSchemaProperty((BeanPropertyWriter) writer, objectVisitor, provider);
}
@Override
public void serializeAsElement(Object elementValue,
JsonGenerator jgen, SerializerProvider prov,
PropertyWriter writer) throws Exception {
// not needed; element filtering only available through new interfaces
throw new UnsupportedOperationException();
}
};
}
/*
/**********************************************************
/* Methods for sub-classes
/**********************************************************
*/
/**
* Method called to determine whether property will be included
* (if 'true' returned) or filtered out (if 'false' returned)
*/
protected boolean include(BeanPropertyWriter writer) {
return true;
}
/**
* Method called to determine whether property will be included
* (if 'true' returned) or filtered out (if 'false' returned)
*
* @since 2.3
*/
protected boolean include(PropertyWriter writer) {
return true;
}
/**
* Method that defines what to do with container elements
* (values contained in an array or {@link java.util.Collection}:
* default implementation simply writes them out.
*
* @since 2.3
*/
protected boolean includeElement(Object elementValue) {
return true;
}
/*
/**********************************************************
/* BeanPropertyFilter (deprecated) implementation
/**********************************************************
*/
@Deprecated
@Override
public void serializeAsField(Object bean, JsonGenerator jgen,
SerializerProvider provider, BeanPropertyWriter writer) throws Exception
{
if (include(writer)) {
writer.serializeAsField(bean, jgen, provider);
} else if (!jgen.canOmitFields()) { // since 2.3
writer.serializeAsOmittedField(bean, jgen, provider);
}
}
@Deprecated
@Override
public void depositSchemaProperty(BeanPropertyWriter writer,
ObjectNode propertiesNode, SerializerProvider provider)
throws JsonMappingException
{
if (include(writer)) {
writer.depositSchemaProperty(propertiesNode, provider);
}
}
@Deprecated
@Override
public void depositSchemaProperty(BeanPropertyWriter writer,
JsonObjectFormatVisitor objectVisitor, SerializerProvider provider)
throws JsonMappingException
{
if (include(writer)) {
writer.depositSchemaProperty(objectVisitor);
}
}
/*
/**********************************************************
/* PropertyFilter implementation
/**********************************************************
*/
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen,
SerializerProvider provider, PropertyWriter writer)
throws Exception
{
if (include(writer)) {
writer.serializeAsField(pojo, jgen, provider);
} else if (!jgen.canOmitFields()) { // since 2.3
writer.serializeAsOmittedField(pojo, jgen, provider);
}
}
@Override
public void serializeAsElement(Object elementValue, JsonGenerator jgen, SerializerProvider provider,
PropertyWriter writer)
throws Exception
{
if (includeElement(elementValue)) {
writer.serializeAsElement(elementValue, jgen, provider);
}
}
@Deprecated
@Override
public void depositSchemaProperty(PropertyWriter writer,
ObjectNode propertiesNode, SerializerProvider provider)
throws JsonMappingException
{
if (include(writer)) {
writer.depositSchemaProperty(propertiesNode, provider);
}
}
@Override
public void depositSchemaProperty(PropertyWriter writer,
JsonObjectFormatVisitor objectVisitor,
SerializerProvider provider) throws JsonMappingException
{
if (include(writer)) {
writer.depositSchemaProperty(objectVisitor);
}
}
/*
/**********************************************************
/* Sub-classes
/**********************************************************
*/
/**
* Filter implementation which defaults to filtering out unknown
* properties and only serializes ones explicitly listed.
*/
public static class FilterExceptFilter
extends SimpleBeanPropertyFilter
implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
/**
* Set of property names to serialize.
*/
protected final Set _propertiesToInclude;
public FilterExceptFilter(Set properties) {
_propertiesToInclude = properties;
}
@Override
protected boolean include(BeanPropertyWriter writer) {
return _propertiesToInclude.contains(writer.getName());
}
@Override
protected boolean include(PropertyWriter writer) {
return _propertiesToInclude.contains(writer.getName());
}
}
/**
* Filter implementation which defaults to serializing all
* properties, except for ones explicitly listed to be filtered out.
*/
public static class SerializeExceptFilter
extends SimpleBeanPropertyFilter
implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
/**
* Set of property names to filter out.
*/
protected final Set _propertiesToExclude;
public SerializeExceptFilter(Set properties) {
_propertiesToExclude = properties;
}
@Override
protected boolean include(BeanPropertyWriter writer) {
return !_propertiesToExclude.contains(writer.getName());
}
@Override
protected boolean include(PropertyWriter writer) {
return !_propertiesToExclude.contains(writer.getName());
}
}
}