package ameba.message.jackson.internal; import com.fasterxml.jackson.databind.ser.FilterProvider; import org.glassfish.jersey.internal.inject.AbstractBinder; import org.glassfish.jersey.message.filtering.spi.ObjectGraphTransformer; import org.glassfish.jersey.message.filtering.spi.ObjectProvider; import javax.inject.Singleton; import javax.ws.rs.core.Configuration; import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; import javax.ws.rs.core.GenericType; /** * {@link javax.ws.rs.core.Feature} adding support for Entity Data Filtering into Jackson media module. * * @author Michal Gajdos (michal.gajdos at oracle.com) * @author icode * @since 0.1.6e * */ public class JacksonFilteringFeature implements Feature { /** * {@inheritDoc} */ @Override public boolean configure(final FeatureContext context) { final Configuration config = context.getConfiguration(); if (!config.isRegistered(JacksonFilteringFeature.Binder.class)) { context.register(new Binder()); return true; } return false; } private static final class Binder extends AbstractBinder { @Override protected void configure() { bindAsContract(JacksonObjectProvider.class) // FilteringObjectProvider. .to(new GenericType<ObjectProvider<FilterProvider>>() { }) // FilteringGraphTransformer. .to(new GenericType<ObjectGraphTransformer<FilterProvider>>() { }) // Scope. .in(Singleton.class); } } }