package com.fasterxml.jackson.databind.deser;

import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.util.AccessPattern;

Helper interface implemented by classes that are to be used as null providers during deserialization. Most importantly implemented by JsonDeserializer (as a mix-in interface), but also by converters used to support more configurable null replacement.
Since:2.9
/** * Helper interface implemented by classes that are to be used as * null providers during deserialization. Most importantly implemented by * {@link com.fasterxml.jackson.databind.JsonDeserializer} (as a mix-in * interface), but also by converters used to support more configurable * null replacement. * * @since 2.9 */
public interface NullValueProvider {
Method called to possibly convert incoming `null` token (read via underlying streaming input source) into other value of type accessor supports. May return `null`, or value compatible with type binding.

NOTE: if getNullAccessPattern() returns `ALWAYS_NULL` or `CONSTANT`, this method WILL NOT use provided `ctxt` and it may thus be passed as `null`.

/** * Method called to possibly convert incoming `null` token (read via * underlying streaming input source) into other value of type accessor * supports. May return `null`, or value compatible with type binding. *<p> * NOTE: if {@link #getNullAccessPattern()} returns `ALWAYS_NULL` or * `CONSTANT`, this method WILL NOT use provided `ctxt` and it may thus * be passed as `null`. */
public Object getNullValue(DeserializationContext ctxt) throws JsonMappingException;
Accessor that may be used to determine if and when provider must be called to access null replacement value.
/** * Accessor that may be used to determine if and when provider must be called to * access null replacement value. */
public AccessPattern getNullAccessPattern();
Method called to determine placeholder value to be used for cases where no value was obtained from input but we must pass a value nonetheless: the common case is that of Creator methods requiring passing a value for every parameter. Usually this is same as getNullValue (which in turn is usually simply Java null), but it can be overridden for specific types: most notable scalar types must use "default" values.

This method needs to be called every time a determination is made.

Default implementation simply calls and returns getNullValue.

Since:2.13
/** * Method called to determine placeholder value to be used for cases * where no value was obtained from input but we must pass a value * nonetheless: the common case is that of Creator methods requiring * passing a value for every parameter. * Usually this is same as {@link #getNullValue} (which in turn * is usually simply Java {@code null}), but it can be overridden * for specific types: most notable scalar types must use "default" * values. *<p> * This method needs to be called every time a determination is made. *<p> * Default implementation simply calls and returns {@link #getNullValue}. * * @since 2.13 */
default Object getAbsentValue(DeserializationContext ctxt) throws JsonMappingException { return getNullValue(ctxt); } }