Search in sources :

Example 1 with NullValueProvider

use of com.fasterxml.jackson.databind.deser.NullValueProvider in project jackson-databind by FasterXML.

the class StdDeserializer method findContentNullProvider.

/**
     * Method called to find {@link NullValueProvider} for a contents of a structured
     * primary property (Collection, Map, array), using
     * "content nulls" setting. If no provider found (not defined),
     * will return given value deserializer (which is a null value provider itself).
     *
     * @since 2.9
     */
protected NullValueProvider findContentNullProvider(DeserializationContext ctxt, BeanProperty prop, JsonDeserializer<?> valueDeser) throws JsonMappingException {
    final Nulls nulls = findContentNullStyle(ctxt, prop);
    if (nulls == Nulls.SKIP) {
        return NullsConstantProvider.skipper();
    }
    NullValueProvider prov = _findNullProvider(ctxt, prop, nulls, valueDeser);
    if (prov != null) {
        return prov;
    }
    return valueDeser;
}
Also used : NullValueProvider(com.fasterxml.jackson.databind.deser.NullValueProvider) Nulls(com.fasterxml.jackson.annotation.JsonSetter.Nulls)

Example 2 with NullValueProvider

use of com.fasterxml.jackson.databind.deser.NullValueProvider in project jackson-databind by FasterXML.

the class StringCollectionDeserializer method createContextual.

/*
    /**********************************************************
    /* Validation, post-processing
    /**********************************************************
     */
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException {
    // May need to resolve types for delegate-based creators:
    JsonDeserializer<Object> delegate = null;
    if (_valueInstantiator != null) {
        AnnotatedWithParams delegateCreator = _valueInstantiator.getDelegateCreator();
        if (delegateCreator != null) {
            JavaType delegateType = _valueInstantiator.getDelegateType(ctxt.getConfig());
            delegate = findDeserializer(ctxt, delegateType, property);
        }
    }
    JsonDeserializer<?> valueDeser = _valueDeserializer;
    final JavaType valueType = _containerType.getContentType();
    if (valueDeser == null) {
        // [databind#125]: May have a content converter
        valueDeser = findConvertingContentDeserializer(ctxt, property, valueDeser);
        if (valueDeser == null) {
            // And we may also need to get deserializer for String
            valueDeser = ctxt.findContextualValueDeserializer(valueType, property);
        }
    } else {
        // if directly assigned, probably not yet contextual, so:
        valueDeser = ctxt.handleSecondaryContextualization(valueDeser, property, valueType);
    }
    // 11-Dec-2015, tatu: Should we pass basic `Collection.class`, or more refined? Mostly
    //   comes down to "List vs Collection" I suppose... for now, pass Collection
    Boolean unwrapSingle = findFormatFeature(ctxt, property, Collection.class, JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    NullValueProvider nuller = findContentNullProvider(ctxt, property, valueDeser);
    if (isDefaultDeserializer(valueDeser)) {
        valueDeser = null;
    }
    return withResolved(delegate, valueDeser, nuller, unwrapSingle);
}
Also used : AnnotatedWithParams(com.fasterxml.jackson.databind.introspect.AnnotatedWithParams) NullValueProvider(com.fasterxml.jackson.databind.deser.NullValueProvider)

Example 3 with NullValueProvider

use of com.fasterxml.jackson.databind.deser.NullValueProvider in project jackson-databind by FasterXML.

the class StringArrayDeserializer method createContextual.

/**
     * Contextualization is needed to see whether we can "inline" deserialization
     * of String values, or if we have to use separate value deserializer.
     */
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException {
    JsonDeserializer<?> deser = _elementDeserializer;
    // May have a content converter
    deser = findConvertingContentDeserializer(ctxt, property, deser);
    JavaType type = ctxt.constructType(String.class);
    if (deser == null) {
        deser = ctxt.findContextualValueDeserializer(type, property);
    } else {
        // if directly assigned, probably not yet contextual, so:
        deser = ctxt.handleSecondaryContextualization(deser, property, type);
    }
    // One more thing: allow unwrapping?
    Boolean unwrapSingle = findFormatFeature(ctxt, property, String[].class, JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    NullValueProvider nuller = findContentNullProvider(ctxt, property, deser);
    // Ok ok: if all we got is the default String deserializer, can just forget about it
    if ((deser != null) && isDefaultDeserializer(deser)) {
        deser = null;
    }
    if ((_elementDeserializer == deser) && (_unwrapSingle == unwrapSingle) && (_nullProvider == nuller)) {
        return this;
    }
    return new StringArrayDeserializer(deser, nuller, unwrapSingle);
}
Also used : NullValueProvider(com.fasterxml.jackson.databind.deser.NullValueProvider)

Example 4 with NullValueProvider

use of com.fasterxml.jackson.databind.deser.NullValueProvider in project jackson-databind by FasterXML.

the class ObjectArrayDeserializer method createContextual.

@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException {
    JsonDeserializer<?> valueDeser = _elementDeserializer;
    Boolean unwrapSingle = findFormatFeature(ctxt, property, _containerType.getRawClass(), JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    // May have a content converter
    valueDeser = findConvertingContentDeserializer(ctxt, property, valueDeser);
    final JavaType vt = _containerType.getContentType();
    if (valueDeser == null) {
        valueDeser = ctxt.findContextualValueDeserializer(vt, property);
    } else {
        // if directly assigned, probably not yet contextual, so:
        valueDeser = ctxt.handleSecondaryContextualization(valueDeser, property, vt);
    }
    TypeDeserializer elemTypeDeser = _elementTypeDeserializer;
    if (elemTypeDeser != null) {
        elemTypeDeser = elemTypeDeser.forProperty(property);
    }
    NullValueProvider nuller = findContentNullProvider(ctxt, property, valueDeser);
    return withResolved(elemTypeDeser, valueDeser, nuller, unwrapSingle);
}
Also used : NullValueProvider(com.fasterxml.jackson.databind.deser.NullValueProvider) TypeDeserializer(com.fasterxml.jackson.databind.jsontype.TypeDeserializer)

Example 5 with NullValueProvider

use of com.fasterxml.jackson.databind.deser.NullValueProvider in project jackson-databind by FasterXML.

the class PrimitiveArrayDeserializers method createContextual.

@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException {
    Boolean unwrapSingle = findFormatFeature(ctxt, property, _valueClass, JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    NullValueProvider nuller = null;
    Nulls nullStyle = findContentNullStyle(ctxt, property);
    if (nullStyle == Nulls.SKIP) {
        nuller = NullsConstantProvider.skipper();
    } else if (nullStyle == Nulls.FAIL) {
        if (property == null) {
            nuller = NullsFailProvider.constructForRootValue(ctxt.constructType(_valueClass));
        } else {
            nuller = NullsFailProvider.constructForProperty(property);
        }
    }
    if ((unwrapSingle == _unwrapSingle) && (nuller == _nuller)) {
        return this;
    }
    return withResolved(nuller, unwrapSingle);
}
Also used : NullValueProvider(com.fasterxml.jackson.databind.deser.NullValueProvider) Nulls(com.fasterxml.jackson.annotation.JsonSetter.Nulls)

Aggregations

NullValueProvider (com.fasterxml.jackson.databind.deser.NullValueProvider)5 Nulls (com.fasterxml.jackson.annotation.JsonSetter.Nulls)2 AnnotatedWithParams (com.fasterxml.jackson.databind.introspect.AnnotatedWithParams)1 TypeDeserializer (com.fasterxml.jackson.databind.jsontype.TypeDeserializer)1