Example usage for com.fasterxml.jackson.databind.deser BeanDeserializerModifier BeanDeserializerModifier

List of usage examples for com.fasterxml.jackson.databind.deser BeanDeserializerModifier BeanDeserializerModifier

Introduction

In this page you can find the example usage for com.fasterxml.jackson.databind.deser BeanDeserializerModifier BeanDeserializerModifier.

Prototype

BeanDeserializerModifier

Source Link

Usage

From source file:io.gravitee.management.rest.mapper.ObjectMapperResolver.java

public ObjectMapperResolver() {
    mapper = new GraviteeMapper();

    SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
        @Override//from   w w  w .  j  a v a 2 s  .com
        public JsonDeserializer<Enum> modifyEnumDeserializer(DeserializationConfig config, final JavaType type,
                BeanDescription beanDesc, final JsonDeserializer<?> deserializer) {
            return new JsonDeserializer<Enum>() {
                @Override
                public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
                    Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass();
                    return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase());
                }
            };
        }
    });
    module.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) {
        @Override
        public void serialize(Enum value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeString(value.name().toLowerCase());
        }
    });
    mapper.registerModule(module);
}

From source file:com.microsoft.rest.serializer.FlatteningDeserializer.java

/**
 * Gets a module wrapping this serializer as an adapter for the Jackson
 * ObjectMapper.//from  w  w  w.  ja  va 2  s .com
 *
 * @param mapper the object mapper for default deserializations
 * @return a simple module to be plugged onto Jackson ObjectMapper.
 */
public static SimpleModule getModule(final ObjectMapper mapper) {
    SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
        @Override
        public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc,
                JsonDeserializer<?> deserializer) {
            if (beanDesc.getBeanClass().getAnnotation(JsonFlatten.class) != null) {
                return new FlatteningDeserializer(beanDesc.getBeanClass(), deserializer, mapper);
            }
            return deserializer;
        }
    });
    return module;
}

From source file:com.github.jonpeterson.jackson.module.interceptor.JsonInterceptorModule.java

public JsonInterceptorModule() {
    super("JsonInterceptor");

    setDeserializerModifier(new BeanDeserializerModifier() {
        @Override// w w w . j  a v a2 s .  com
        public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,
                BeanDescription beanDescription, JsonDeserializer<?> deserializer) {
            if (deserializer instanceof StdDeserializer) {
                JsonInterceptors jsonInterceptors = beanDescription.getClassAnnotations()
                        .get(JsonInterceptors.class);
                if (jsonInterceptors != null) {
                    Class<? extends JsonInterceptor>[] interceptors = jsonInterceptors.beforeDeserialization();
                    if (interceptors.length > 0)
                        return createInterceptingDeserializer((StdDeserializer) deserializer, interceptors);
                }
            }

            return deserializer;
        }

        // here just to make generics work without warnings
        private <T> JsonInterceptingDeserializer<T> createInterceptingDeserializer(
                StdDeserializer<T> deserializer, Class<? extends JsonInterceptor>[] interceptors) {
            return new JsonInterceptingDeserializer<T>(deserializer, interceptors);
        }
    });

    setSerializerModifier(new BeanSerializerModifier() {

        @Override
        public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDescription,
                JsonSerializer<?> serializer) {
            if (serializer instanceof StdSerializer) {
                JsonInterceptors jsonInterceptors = beanDescription.getClassAnnotations()
                        .get(JsonInterceptors.class);
                if (jsonInterceptors != null) {
                    Class<? extends JsonInterceptor>[] interceptors = jsonInterceptors.afterSerialization();
                    if (interceptors.length > 0)
                        return createInterceptingSerializer((StdSerializer) serializer, interceptors);
                }
            }

            return serializer;
        }

        // here just to make generics work without warnings
        private <T> JsonInterceptingSerializer<T> createInterceptingSerializer(StdSerializer<T> serializer,
                Class<? extends JsonInterceptor>[] interceptors) {
            return new JsonInterceptingSerializer<T>(serializer, interceptors);
        }
    });
}

From source file:nebula.plugin.metrics.dispatcher.AbstractMetricsDispatcher.java

/**
 * Register Jackson module that maps enums as lowercase. Per http://stackoverflow.com/a/24173645.
 *///  ww w  .  java  2  s.c om
@SuppressWarnings("rawtypes")
private static void registerEnumModule(ObjectMapper mapper) {
    SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
        @Override
        public JsonDeserializer<Enum> modifyEnumDeserializer(DeserializationConfig config, final JavaType type,
                BeanDescription beanDesc, final JsonDeserializer<?> deserializer) {
            return new JsonDeserializer<Enum>() {
                @Override
                public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
                    @SuppressWarnings("unchecked")
                    Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass();
                    return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase());
                }
            };
        }
    });
    module.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) {
        @Override
        public void serialize(Enum value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeString(value.name().toLowerCase());
        }
    });
    mapper.registerModule(module);
}

From source file:org.apache.ode.jacob.soup.jackson.JacobModule.java

public JacobModule() {
    super("jacob-module", Version.unknownVersion());

    final ExecutionQueueImplSerializer cqis = new ExecutionQueueImplSerializer();
    addSerializer(ChannelProxy.class, new ChannelProxySerializer(cqis));
    addSerializer(Message.class, new MessageSerializer());
    addSerializer(JacksonExecutionQueueImpl.class, cqis);
    addSerializer(ChannelRef.class, new ChannelRefSerializer(cqis));
    addDeserializer(JacksonExecutionQueueImpl.class, new ExecutionQueueImplDeserializer());
    addDeserializer(Message.class, new MessageDeserializer());
    addDeserializer(Channel.class, new ChannelProxyDeserializer());
    addDeserializer(ChannelRef.class, new ChannelRefDeserializer());

    setDeserializerModifier(new BeanDeserializerModifier() {

        public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc,
                JsonDeserializer<?> deserializer) {

            // use channel proxy deserializer for channels.
            if (Channel.class.isAssignableFrom(beanDesc.getBeanClass())
                    && beanDesc.getBeanClass().isInterface()) {
                return new ChannelProxyDeserializer();
            }/*www . j  a  v a  2  s .c om*/

            return super.modifyDeserializer(config, beanDesc, deserializer);
        }
    });
}

From source file:com.logsniffer.config.BeanConfigFactoryManager.java

@SuppressWarnings("unchecked")
@PostConstruct/*from  www.j a v  a  2 s  . c o  m*/
private void initJsonMapper() {
    final SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
        @Override
        public JsonDeserializer<?> modifyDeserializer(final DeserializationConfig config,
                final BeanDescription beanDesc, final JsonDeserializer<?> deserializer) {
            if (ConfiguredBean.class.isAssignableFrom(beanDesc.getBeanClass())) {
                return new ConfiguredBeanDeserializer(deserializer);
            }
            return deserializer;
        }
    });
    jsonMapper.registerModule(module);
    if (postConstructors != null) {
        for (final BeanPostConstructor<?> bpc : postConstructors) {
            mappedPostConstrucors.put(bpc.getClass(), bpc);
        }
    }

    // Register sub beans
    final ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(
            false);
    final AssignableTypeFilter filter4configBenas = new AssignableTypeFilter(ConfiguredBean.class);
    scanner.addIncludeFilter(filter4configBenas);

    for (final BeanDefinition bd : scanner.findCandidateComponents("com.logsniffer")) {
        try {
            final Class<? extends ConfiguredBean> clazz = (Class<? extends ConfiguredBean>) Class
                    .forName(bd.getBeanClassName());
            final JsonTypeName jsonNameAnnotation = clazz.getAnnotation(JsonTypeName.class);
            final List<String> names = new ArrayList<String>();
            configBeanNames.put(clazz, names);
            if (jsonNameAnnotation != null) {
                names.add(jsonNameAnnotation.value());
                if (jsonNameAnnotation.deprecated() != null) {
                    for (final String dep : jsonNameAnnotation.deprecated()) {
                        names.add(dep);
                    }
                }
            }
            names.add(clazz.getSimpleName());
            logger.debug("Registered JSON type {} for following names: {}", clazz, names);
        } catch (final ClassNotFoundException e) {
            logger.warn("Failed to register JSON type name for " + bd.getBeanClassName(), e);
        }
    }
}

From source file:com.github.shyiko.jackson.module.advice.JsonAdviceModule.java

@Override
public void setupModule(SetupContext context) {
    context.addBeanSerializerModifier(new BeanSerializerModifier() {

        @Override/*from   w w  w  .  java  2s  . c o  m*/
        public com.fasterxml.jackson.databind.ser.BeanSerializerBuilder updateBuilder(
                SerializationConfig config, BeanDescription beanDesc,
                com.fasterxml.jackson.databind.ser.BeanSerializerBuilder builder) {
            JsonSerializerAdvice advice = beanDesc.getClassAnnotations().get(JsonSerializerAdvice.class);
            return advice != null ? new AdvisedBeanSerializerBuilder(builder, advice.value()) : builder;
        }
    });
    context.addBeanDeserializerModifier(new BeanDeserializerModifier() {

        @Override
        public BeanDeserializerBuilder updateBuilder(DeserializationConfig config, BeanDescription beanDesc,
                BeanDeserializerBuilder builder) {
            JsonDeserializerAdvice advice = beanDesc.getClassAnnotations().get(JsonDeserializerAdvice.class);
            return advice != null ? new AdvisedBeanDeserializerBuilder(builder, advice.value()) : builder;
        }
    });
}

From source file:de.javagl.jgltf.model.io.JacksonUtils.java

/**
 * Creates a BeanDeserializerModifier that replaces the 
 * SettableBeanProperties in the BeanDeserializerBuilder with
 * ErrorReportingSettableBeanProperty instances that forward
 * information about errors when setting bean properties to the
 * given consumer. (Don't ask ... )  /*w  w  w .  j  a va 2 s. c  o m*/
 * 
 * @param jsonErrorConsumer The consumer for {@link JsonError}s.
 * If this is <code>null</code>, then no errors will be reported.
 * @return The modifier
 */
private static BeanDeserializerModifier createErrorHandlingBeanDeserializerModifier(
        Consumer<? super JsonError> jsonErrorConsumer) {
    return new BeanDeserializerModifier() {
        @Override
        public BeanDeserializerBuilder updateBuilder(DeserializationConfig config, BeanDescription beanDesc,
                BeanDeserializerBuilder builder) {
            Iterator<SettableBeanProperty> propertiesIterator = builder.getProperties();
            while (propertiesIterator.hasNext()) {
                SettableBeanProperty property = propertiesIterator.next();
                SettableBeanProperty wrappedProperty = new ErrorReportingSettableBeanProperty(property,
                        jsonErrorConsumer);
                builder.addOrReplaceProperty(wrappedProperty, true);
            }
            return builder;
        }
    };
}

From source file:de.ks.flatadocdb.defaults.json.SerializationModule.java

@Override
public void setupModule(SetupContext context) {
    context.addBeanSerializerModifier(new BeanSerializerModifier() {
        @Override//from   w  w  w  .jav  a  2  s  .  co  m
        public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,
                List<BeanPropertyWriter> beanProperties) {
            if (metaModel.isRegistered(beanDesc.getBeanClass())) {
                EntityDescriptor entityDescriptor = metaModel.getEntityDescriptor(beanDesc.getBeanClass());

                List<BeanPropertyWriter> relationProperties = beanProperties.stream()//
                        .filter(p -> entityDescriptor.isRelation(p.getMember())).collect(Collectors.toList());

                List<BeanPropertyWriter> repoPathProperty = beanProperties.stream()//
                        .filter(p -> p.getAnnotation(PathInRepository.class) != null)
                        .collect(Collectors.toList());

                ArrayList<BeanPropertyWriter> all = new ArrayList<>(beanProperties);
                log.trace("Removing {} relation properties fron {}: {}", relationProperties.size(),
                        beanDesc.getBeanClass(), relationProperties);
                all.removeAll(relationProperties);
                all.removeAll(repoPathProperty);
                relationProperties.stream().map(old -> new RelationCollectionPropertyWriter(old, metaModel))
                        .forEach(all::add);
                return all;
            } else {
                return beanProperties;
            }
        }
    });

    context.addBeanDeserializerModifier(new BeanDeserializerModifier() {
        @Override
        public List<BeanPropertyDefinition> updateProperties(DeserializationConfig config,
                BeanDescription beanDesc, List<BeanPropertyDefinition> propDefs) {
            if (metaModel.isRegistered(beanDesc.getBeanClass())) {
                EntityDescriptor entityDescriptor = metaModel.getEntityDescriptor(beanDesc.getBeanClass());
                return propDefs.stream()//
                        .filter(p -> !entityDescriptor.isRelation(p.getPrimaryMember()))//
                        .filter(p -> p.getPrimaryMember().getAnnotation(PathInRepository.class) == null)//
                        .collect(Collectors.toList());
            } else {
                return propDefs;
            }
        }
    });
}

From source file:nl.talsmasoftware.enumerables.support.json.jackson2.EnumerableModule.java

/**
 * Configures the Jackson module.//w  w  w. j a  v a  2 s  .  c o  m
 * <p>
 * This configures a {@link BeanDeserializerModifier} that will return the configured deserializer from this
 * module for <em>any</em> subtype of {@link Enumerable}.
 *
 * @param setupContext De setup context to initialize with.
 *                     The Enumerable deserializer will be selected for any subtype of Enumerable.
 */
@Override
public void setupModule(final SetupContext setupContext) {
    if (setupContext != null)
        setupContext.addBeanDeserializerModifier(new BeanDeserializerModifier() {
            @Override
            public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,
                    BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
                return asEnumerableSubclass(beanDesc) != null ? enumerableDeserializer
                        : super.modifyDeserializer(config, beanDesc, deserializer);
            }
        });
    super.setupModule(setupContext);
}