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

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

Introduction

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

Prototype

public Object deserializeWithType(JsonParser paramJsonParser,
            DeserializationContext paramDeserializationContext, TypeDeserializer paramTypeDeserializer) 

Source Link

Usage

From source file:net.nullschool.grains.jackson.datatype.AbstractBasicConstCollectionDeserializer.java

@Override
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    JsonToken token = jp.getCurrentToken();
    if (token != JsonToken.START_ARRAY) {
        throw ctxt.mappingException(collectionType.getRawClass());
    }//from   ww  w .  ja  v a  2 s . co m

    if ((token = jp.nextToken()) == JsonToken.END_ARRAY) {
        return emptyResult();
    }

    JsonDeserializer<?> ed = elementDeserializer;
    TypeDeserializer etd = elementTypeDeserializer;

    List<Object> elements = null;
    Object element;
    do {
        element = token != JsonToken.VALUE_NULL
                ? etd == null ? ed.deserialize(jp, ctxt) : ed.deserializeWithType(jp, ctxt, etd)
                : null;

        token = jp.nextToken();
        if (elements == null) {
            if (token == JsonToken.END_ARRAY) {
                return resultOf(element);
            }
            elements = new ArrayList<>();
        }
        elements.add(element);
    } while (token != JsonToken.END_ARRAY);

    return asResult(elements);
}

From source file:net.nullschool.grains.jackson.datatype.AbstractBasicConstMapDeserializer.java

@Override
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    JsonToken token = jp.getCurrentToken();
    if (token == JsonToken.START_OBJECT) {
        token = jp.nextToken();/* w  w w  .  ja va 2s.co m*/
    } else if (token != JsonToken.FIELD_NAME) {
        throw ctxt.mappingException(mapType.getRawClass());
    }

    if (token == JsonToken.END_OBJECT) {
        return emptyResult();
    }

    KeyDeserializer kd = keyDeserializer;
    JsonDeserializer<?> vd = valueDeserializer;
    TypeDeserializer vtd = valueTypeDeserializer;

    List<Object> keys = null;
    List<Object> values = null;
    Object key;
    Object value;
    do {
        String name = jp.getCurrentName();
        key = kd == null ? name : kd.deserializeKey(name, ctxt);
        value = jp.nextToken() != JsonToken.VALUE_NULL
                ? vtd == null ? vd.deserialize(jp, ctxt) : vd.deserializeWithType(jp, ctxt, vtd)
                : null;

        token = jp.nextToken();
        if (keys == null) {
            if (token == JsonToken.END_OBJECT) {
                return resultOf(key, value);
            }
            keys = new ArrayList<>();
            values = new ArrayList<>();
        }
        keys.add(key);
        values.add(value);
    } while (token != JsonToken.END_OBJECT);

    return asResult(keys, values);
}

From source file:com.kaaprotech.satu.jackson.SatuDeserializers.java

@Override
public JsonDeserializer<?> findCollectionDeserializer(final CollectionType type,
        final DeserializationConfig config, final BeanDescription beanDesc,
        final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer)
        throws JsonMappingException {

    if (ImmutableSet.class.isAssignableFrom(type.getRawClass())) {
        return new StdDeserializer<Object>(type) {
            private static final long serialVersionUID = 1L;

            @Override//  w w w. ja  va2 s  .c o m
            public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException {

                if (jp.isExpectedStartArrayToken()) {
                    JsonToken t;

                    MutableSet<Object> s = Sets.mutable.of();

                    while ((t = jp.nextToken()) != JsonToken.END_ARRAY) {
                        Object value;
                        if (t == JsonToken.VALUE_NULL) {
                            value = null;
                        } else if (elementDeserializer == null) {
                            value = jp.readValueAs(type.getContentType().getRawClass());
                        } else if (elementTypeDeserializer == null) {
                            value = elementDeserializer.deserialize(jp, context);
                        } else {
                            value = elementDeserializer.deserializeWithType(jp, context,
                                    elementTypeDeserializer);
                        }
                        s.add(value);
                    }
                    return s.toImmutable();
                }
                throw context.mappingException(type.getRawClass());
            }
        };
    }

    return super.findCollectionDeserializer(type, config, beanDesc, elementTypeDeserializer,
            elementDeserializer);
}

From source file:com.kaaprotech.satu.jackson.SatuDeserializers.java

@Override
public JsonDeserializer<?> findMapDeserializer(final MapType type, final DeserializationConfig config,
        BeanDescription beanDesc, final KeyDeserializer keyDeserializer,
        final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer)
        throws JsonMappingException {

    if (ImmutableMap.class.isAssignableFrom(type.getRawClass())) {
        return new StdDeserializer<Object>(type) {
            private static final long serialVersionUID = 1L;

            @Override//w ww. java  2 s  .  co m
            public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException {

                JsonToken t = jp.getCurrentToken();
                if (t == JsonToken.START_OBJECT) {
                    t = jp.nextToken();
                }
                if (t != JsonToken.FIELD_NAME && t != JsonToken.END_OBJECT) {
                    throw context.mappingException(type.getRawClass());
                }

                MutableMap<Object, Object> m = Maps.mutable.of();

                for (; jp.getCurrentToken() == JsonToken.FIELD_NAME; jp.nextToken()) {
                    // Pointing to field name
                    String fieldName = jp.getCurrentName();
                    Object key = (keyDeserializer == null) ? fieldName
                            : keyDeserializer.deserializeKey(fieldName, context);
                    t = jp.nextToken();

                    Object value;
                    if (t == JsonToken.VALUE_NULL) {
                        value = null;
                    } else if (elementDeserializer == null) {
                        value = jp.readValueAs(type.getContentType().getRawClass());
                    } else if (elementTypeDeserializer == null) {
                        value = elementDeserializer.deserialize(jp, context);
                    } else {
                        value = elementDeserializer.deserializeWithType(jp, context, elementTypeDeserializer);
                    }
                    m.put(key, value);
                }
                return m.toImmutable();
            }
        };
    }

    return super.findMapDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer,
            elementDeserializer);
}