com.fitbur.jackson.databind.deser.DeserializationProblemHandler Maven / Gradle / Ivy
package com.fitbur.jackson.databind.deser;
import java.io.IOException;
import com.fitbur.jackson.core.JsonParser;
import com.fitbur.jackson.core.JsonProcessingException;
import com.fitbur.jackson.databind.DeserializationConfig;
import com.fitbur.jackson.databind.DeserializationContext;
import com.fitbur.jackson.databind.JsonDeserializer;
import com.fitbur.jackson.databind.ObjectMapper;
/**
* This is the class that can be registered (via
* {@link DeserializationConfig} object owner by
* {@link ObjectMapper}) to get called when a potentially
* recoverable problem is encountered during deserialization
* process. Handlers can try to resolve the problem, throw
* an exception or just skip the content.
*
* Default implementations for all methods implemented minimal
* "do nothing" functionality, which is roughly equivalent to
* not having a registered listener at all. This allows for
* only implemented handler methods one is interested in, without
* handling other cases.
*
* NOTE: it is typically NOT acceptable to simply do nothing,
* because this will result in unprocessed tokens being left in
* token stream (read via {@link JsonParser}, in case a structured
* (JSON Object or JSON Array) value is being pointed to by parser.
*/
public abstract class DeserializationProblemHandler
{
/**
* Method called when a JSON Map ("Object") entry with an unrecognized
* name is encountered.
* Content (supposedly) matching the property are accessible via
* parser that can be obtained from passed deserialization context.
* Handler can also choose to skip the content; if so, it MUST return
* true to indicate it did handle property successfully.
* Skipping is usually done like so:
*
* jp.skipChildren();
*
*
* Note: version 1.2 added new deserialization feature
* (DeserializationConfig.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
).
* It will only have effect after handler is called, and only
* if handler did not handle the problem.
*
* @param beanOrClass Either bean instance being deserialized (if one
* has been instantiated so far); or Class that indicates type that
* will be instantiated (if no instantiation done yet: for example
* when bean uses non-default constructors)
* @param jp Parser to use for handling problematic content
*
* @return True if the problem is resolved (and content available used or skipped);
* false if the handler did not anything and the problem is unresolved. Note that in
* latter case caller will either throw an exception or explicitly skip the content,
* depending on configuration.
*/
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser jp,
JsonDeserializer> deserializer, Object beanOrClass, String propertyName)
throws IOException, JsonProcessingException
{
return false;
}
}