package org.jboss.resteasy.test.providers.jackson2.jsonfilter.resource; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.FilterProvider; import com.fasterxml.jackson.databind.ser.PropertyFilter; import com.fasterxml.jackson.databind.ser.PropertyWriter; import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; import com.fasterxml.jackson.jaxrs.cfg.EndpointConfigBase; import com.fasterxml.jackson.jaxrs.cfg.ObjectWriterModifier; import javax.ws.rs.core.MultivaluedMap; import java.io.IOException; public class ObjectFilterModifierConditional extends ObjectWriterModifier { @Override public ObjectWriter modify(EndpointConfigBase<?> endpointConfigBase, MultivaluedMap<String, Object> multivaluedMap, Object o, ObjectWriter objectWriter, JsonGenerator jsonGenerator) throws IOException { PropertyFilter theFilter = new SimpleBeanPropertyFilter() { @Override public void serializeAsField (Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception { if (include(writer)) { if (!writer.getName().equals("id")) { writer.serializeAsField(pojo, jgen, provider); return; } int intValue = ((Jackson2Product) pojo).getId(); if (intValue >= 0) { writer.serializeAsField(pojo, jgen, provider); } } else if (!jgen.canOmitFields()) { // since 2.3 writer.serializeAsOmittedField(pojo, jgen, provider); } } @Override protected boolean include(BeanPropertyWriter writer) { return true; } @Override protected boolean include(PropertyWriter writer) { return true; } }; FilterProvider filterProvider = new SimpleFilterProvider().addFilter( "nameFilter", theFilter); return objectWriter.with(filterProvider); } }