Example usage for com.fasterxml.jackson.databind JsonDeserializer JsonDeserializer

List of usage examples for com.fasterxml.jackson.databind JsonDeserializer JsonDeserializer

Introduction

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

Prototype

JsonDeserializer

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/*  www  .  jav  a2s. c  om*/
        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.cloudmine.api.persistance.CMJacksonModule.java

public CMJacksonModule() {
    super("CustomModule", new Version(1, 0, 0, null));
    addSerializer(new JsonSerializer<Date>() {

        @Override/*from  ww  w .  j  av  a  2s  .  c  o  m*/
        public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider)
                throws IOException, JsonProcessingException {
            jgen.writeStartObject();
            jgen.writeRaw(JsonUtilities.convertDateToUnwrappedJsonClass(value));
            jgen.writeEndObject();
        }

        @Override
        public Class<Date> handledType() {
            return Date.class;
        }
    });

    addDeserializer(Date.class, new JsonDeserializer<Date>() {
        @Override
        public Date deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            ObjectMapper mapper = (ObjectMapper) jp.getCodec();
            ObjectNode root = (ObjectNode) mapper.readTree(jp);
            JsonNode classNode = root.get(JsonUtilities.CLASS_KEY);
            boolean isDate = classNode != null && JsonUtilities.DATE_CLASS.equals(classNode.asText());
            if (isDate) {
                JsonNode timeNode = root.get(JsonUtilities.TIME_KEY);
                if (timeNode != null) {
                    Long seconds = timeNode.asLong();
                    Date date = new Date(seconds * 1000);
                    return date;
                }
            }
            return null;
        }
    });
    addSerializer(new JsonSerializer<SimpleCMObject>() {

        @Override
        public void serialize(SimpleCMObject value, JsonGenerator jgen, SerializerProvider provider)
                throws IOException {
            jgen.writeStartObject();
            String json = null;
            try {
                json = value.asUnkeyedObject();
            } catch (ConversionException e) {
                LOG.error("Error while serializing, sending empty json", e);
                json = JsonUtilities.EMPTY_JSON;
            }
            jgen.writeRaw(JsonUtilities.unwrap(json));
            jgen.writeEndObject();
        }

        @Override
        public Class<SimpleCMObject> handledType() {
            return SimpleCMObject.class;
        }
    });

    addSerializer(jsonSerializerForType(CMFile.class));
    addSerializer(jsonSerializerForType(CMSessionToken.class));
    addSerializer(jsonSerializerForType(CMType.class));
    addSerializer(jsonSerializerForType(TransportableString.class));
    addSerializer(jsonSerializerForType(ResponseBase.class));

}

From source file:com.netflix.suro.jackson.DefaultObjectMapper.java

@Inject
public DefaultObjectMapper(final Injector injector, Set<TypeHolder> crossInjectable) {
    SimpleModule serializerModule = new SimpleModule("SuroServer default serializers");
    serializerModule.addSerializer(ByteOrder.class, ToStringSerializer.instance);
    serializerModule.addDeserializer(ByteOrder.class, new JsonDeserializer<ByteOrder>() {
        @Override/*from  w w w  . ja va2 s . c  om*/
        public ByteOrder deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            if (ByteOrder.BIG_ENDIAN.toString().equals(jp.getText())) {
                return ByteOrder.BIG_ENDIAN;
            }
            return ByteOrder.LITTLE_ENDIAN;
        }
    });
    registerModule(serializerModule);
    registerModule(new GuavaModule());

    if (injector != null) {
        setInjectableValues(new InjectableValues() {
            @Override
            public Object findInjectableValue(Object valueId, DeserializationContext ctxt,
                    BeanProperty forProperty, Object beanInstance) {
                LOG.info("Looking for " + valueId);
                try {
                    return injector.getInstance(
                            Key.get(forProperty.getType().getRawClass(), Names.named((String) valueId)));
                } catch (Exception e) {
                    try {
                        return injector.getInstance(forProperty.getType().getRawClass());
                    } catch (Exception ex) {
                        LOG.info("No implementation found, returning null");
                    }
                    return null;
                }
            }
        });
    }

    configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    configure(MapperFeature.AUTO_DETECT_GETTERS, false);
    configure(MapperFeature.AUTO_DETECT_CREATORS, false);
    configure(MapperFeature.AUTO_DETECT_FIELDS, false);
    configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false);
    configure(MapperFeature.AUTO_DETECT_SETTERS, false);
    configure(SerializationFeature.INDENT_OUTPUT, false);

    if (crossInjectable != null) {
        for (TypeHolder entry : crossInjectable) {
            LOG.info("Registering subtype : " + entry.getName() + " -> "
                    + entry.getRawType().getCanonicalName());
            registerSubtypes(new NamedType(entry.getRawType(), entry.getName()));
        }
    }
}

From source file:org.rapidoid.db.impl.inmem.JacksonEntitySerializer.java

@SuppressWarnings("rawtypes")
private void initDbMapper() {
    SimpleModule dbModule = new SimpleModule("DbModule", new Version(1, 0, 0, null, null, null));

    dbModule.addDeserializer(DbList.class, new JsonDeserializer<DbList>() {
        @SuppressWarnings("unchecked")
        @Override/*from   www  .  j  a va2  s.  co m*/
        public DbList deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            Map<String, Object> data = jp.readValueAs(Map.class);
            String relation = (String) data.get("relation");
            List<? extends Number> ids = (List<Number>) data.get("ids");
            return new InMemDbList(db, null, relation, ids);
        }
    });

    dbModule.addDeserializer(DbSet.class, new JsonDeserializer<DbSet>() {
        @SuppressWarnings("unchecked")
        @Override
        public DbSet deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            Map<String, Object> data = jp.readValueAs(Map.class);
            String relation = (String) data.get("relation");
            List<? extends Number> ids = (List<Number>) data.get("ids");
            return new InMemDbSet(db, null, relation, ids);
        }
    });

    dbModule.addDeserializer(DbRef.class, new JsonDeserializer<DbRef>() {
        @SuppressWarnings("unchecked")
        @Override
        public DbRef deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            Map<String, Object> data = jp.readValueAs(Map.class);
            String relation = (String) data.get("relation");
            List<? extends Number> ids = (List<Number>) data.get("ids");
            U.must(ids.size() <= 1, "Expected 0 or 1 IDs!");
            long id = !ids.isEmpty() ? ids.get(0).longValue() : -1;
            return new InMemDbRef(db, null, relation, id);
        }
    });

    mapper.registerModule(dbModule);

    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}

From source file:org.ng200.openolympus.DurationJacksonModule.java

public DurationJacksonModule() {
    addSerializer(new JsonSerializer<Duration>() {
        @Override//from ww  w.j a  v a  2  s .c o  m
        public void serialize(Duration duration, JsonGenerator gen, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            gen.writeNumber(duration.toMillis());
        }

        @Override
        public Class<Duration> handledType() {
            return Duration.class;
        }
    });
    addDeserializer(Duration.class, new JsonDeserializer<Duration>() {
        @Override
        public Duration deserialize(JsonParser jp, DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            long l = jp.getValueAsLong();
            return Duration.ofMillis(l);
        }

        @Override
        public Class<Duration> handledType() {
            return Duration.class;
        }
    });
}

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

/**
 * Register Jackson module that maps enums as lowercase. Per http://stackoverflow.com/a/24173645.
 *//*from  www. ja v  a 2  s  .co  m*/
@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.mongojack.TestCustomObjectMapper.java

private ObjectMapper createObjectMapper() {
    SimpleModule module = new SimpleModule("MySimpleModule", new Version(1, 0, 0, null, "", ""));
    module.addDeserializer(Custom.class, new JsonDeserializer<Custom>() {
        @Override/*from   w w  w . j av  a  2s  .  co m*/
        public Custom deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
            JsonNode node = jp.readValueAsTree();
            return new Custom(node.get("v1").asText(), node.get("v2").asText());
        }
    });
    module.addSerializer(Custom.class, new JsonSerializer<Custom>() {
        @Override
        public void serialize(Custom value, JsonGenerator jgen, SerializerProvider provider)
                throws IOException {
            jgen.writeStartObject();
            jgen.writeFieldName("v1");
            jgen.writeString(value.value1);
            jgen.writeFieldName("v2");
            jgen.writeString(value.value2);
            jgen.writeEndObject();
        }
    });

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(module);
    MongoJackModule.configure(objectMapper);
    return objectMapper;
}

From source file:com.google.api.server.spi.config.annotationreader.ApiAnnotationIntrospector.java

private static <TFrom, TTo> JsonDeserializer<TFrom> getJsonDeserializer(
        @Nullable final Transformer<TFrom, TTo> serializer) {
    if (serializer == null) {
        return null;
    }/*from  ww  w.  j  a  va 2  s . c  o m*/
    final TypeReference<TTo> serializedType = typeReferenceOf(serializer);
    if (serializer instanceof ResourceTransformer) {
        @SuppressWarnings("unchecked")
        final ResourceTransformer<TFrom> resourceSerializer = (ResourceTransformer<TFrom>) serializer;
        return new ResourceDeserializer<>(resourceSerializer);
    } else {
        return new JsonDeserializer<TFrom>() {
            @Override
            public TFrom deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
                TTo deserialized = jp.readValueAs(serializedType);
                return serializer.transformFrom(deserialized);
            }
        };
    }
}

From source file:org.emfjson.jackson.tests.custom.CustomDeserializersTest.java

@Test
public void testDeserializeReferenceAsStrings() throws JsonProcessingException {
    EMFModule module = new EMFModule();
    module.configure(EMFModule.Feature.OPTION_USE_ID, true);
    module.configure(EMFModule.Feature.OPTION_SERIALIZE_TYPE, false);

    module.setReferenceDeserializer(new JsonDeserializer<ReferenceEntry>() {
        @Override// ww  w . j  a va  2s  .  c o  m
        public ReferenceEntry deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            final EObject parent = EMFContext.getParent(ctxt);
            final EReference reference = EMFContext.getReference(ctxt);

            if (p.getCurrentToken() == JsonToken.FIELD_NAME) {
                p.nextToken();
            }

            return new ReferenceEntry.Base(parent, reference, p.getText());
        }
    });

    mapper.registerModule(module);

    JsonNode data = mapper.createArrayNode()
            .add(mapper.createObjectNode().put("@id", "1").put("name", "Paul").put("uniqueFriend", "2"))
            .add(mapper.createObjectNode().put("@id", "2").put("name", "Franck"));

    Resource resource = mapper.reader().withAttribute(RESOURCE_SET, resourceSet)
            .withAttribute(ROOT_ELEMENT, ModelPackage.Literals.USER).treeToValue(data, Resource.class);

    assertEquals(2, resource.getContents().size());

    User u1 = (User) resource.getContents().get(0);
    User u2 = (User) resource.getContents().get(1);

    assertSame(u2, u1.getUniqueFriend());
}

From source file:io.coala.json.DynaBean.java

/**
 * @param referenceType//from w w  w . j av  a  2  s.  c om
 * @param <S>
 * @param <T>
 * @return
 */
static final <S, T> JsonDeserializer<T> createJsonDeserializer(final ObjectMapper om, final Class<T> resultType,
        final Properties... imports) {
    return new JsonDeserializer<T>() {

        @Override
        public T deserializeWithType(final JsonParser jp, final DeserializationContext ctxt,
                final TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException {
            return deserialize(jp, ctxt);
        }

        @Override
        public T deserialize(final JsonParser jp, final DeserializationContext ctxt)
                throws IOException, JsonProcessingException {
            if (jp.getCurrentToken() == JsonToken.VALUE_NULL)
                return null;

            //            if( Wrapper.class.isAssignableFrom( resultType ) )
            //            {
            //               // FIXME
            //               LOG.trace( "deser wrapper intf of {}", jp.getText() );
            //               return (T) Wrapper.Util.valueOf( jp.getText(),
            //                     resultType.asSubclass( Wrapper.class ) );
            //            } 
            if (Config.class.isAssignableFrom(resultType)) {
                final Map<String, Object> entries = jp.readValueAs(new TypeReference<Map<String, Object>>() {
                });

                final Iterator<Entry<String, Object>> it = entries.entrySet().iterator();
                for (Entry<String, Object> next = null; it.hasNext(); next = it.next())
                    if (next != null && next.getValue() == null) {
                        LOG.trace("Ignoring null value: {}", next);
                        it.remove();
                    }
                return resultType.cast(ConfigFactory.create(resultType.asSubclass(Config.class), entries));
            }
            // else if (Config.class.isAssignableFrom(resultType))
            // throw new JsonGenerationException(
            // "Config does not extend "+Mutable.class.getName()+" required for deserialization: "
            // + Arrays.asList(resultType
            // .getInterfaces()));

            // can't parse directly to interface type
            final DynaBean bean = new DynaBean();
            final TreeNode tree = jp.readValueAsTree();

            // override attributes as defined in interface getters
            final Set<String> attributes = new HashSet<>();
            for (Method method : resultType.getMethods()) {
                if (method.getReturnType().equals(Void.TYPE) || method.getParameterTypes().length != 0)
                    continue;

                final String attribute = method.getName();
                if (attribute.equals("toString") || attribute.equals("hashCode"))
                    continue;

                attributes.add(attribute);
                final TreeNode value = tree.get(attribute);// bean.any().get(attributeName);
                if (value == null)
                    continue;

                bean.set(method.getName(),
                        om.treeToValue(value, JsonUtil.checkRegistered(om, method.getReturnType(), imports)));
            }
            if (tree.isObject()) {
                // keep superfluous properties as TreeNodes, just in case
                final Iterator<String> fieldNames = tree.fieldNames();
                while (fieldNames.hasNext()) {
                    final String fieldName = fieldNames.next();
                    if (!attributes.contains(fieldName))
                        bean.set(fieldName, tree.get(fieldName));
                }
            } else if (tree.isValueNode()) {
                for (Class<?> type : resultType.getInterfaces())
                    for (Method method : type.getDeclaredMethods()) {
                        //                     LOG.trace( "Scanning {}", method );
                        if (method.isAnnotationPresent(JsonProperty.class)) {
                            final String property = method.getAnnotation(JsonProperty.class).value();
                            //                        LOG.trace( "Setting {}: {}", property,
                            //                              ((ValueNode) tree).textValue() );
                            bean.set(property, ((ValueNode) tree).textValue());
                        }
                    }
            } else
                throw ExceptionFactory.createUnchecked("Expected {} but parsed: {}", resultType,
                        tree.getClass());

            return DynaBean.proxyOf(om, resultType, bean, imports);
        }
    };
}