diff options
author | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-29 12:23:19 -0700 |
---|---|---|
committer | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-29 12:23:19 -0700 |
commit | b5dbb0acc47980a619d25ef7c38681833cec5288 (patch) | |
tree | 2a8385c5ccaf6ff1776694ca256b713f3d270e45 /src/main/java/com/fasterxml | |
parent | d1591a524c9292613f8873271d2db400362e31d3 (diff) | |
download | jackson-databind-b5dbb0acc47980a619d25ef7c38681833cec5288.tar.gz |
Minor refactoring, preparing for "extract-scalar-from-Object" support
Diffstat (limited to 'src/main/java/com/fasterxml')
3 files changed, 44 insertions, 29 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java b/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java index 386259c54..1004defb8 100644 --- a/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java +++ b/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java @@ -820,7 +820,7 @@ public abstract class DeserializationContext public Date parseDate(String dateStr) throws IllegalArgumentException { try { - DateFormat df = getDateFormat(); + DateFormat df = _getDateFormat(); return df.parse(dateStr); } catch (ParseException e) { throw new IllegalArgumentException(String.format( @@ -842,6 +842,36 @@ public abstract class DeserializationContext /* /********************************************************** + /* Extension points for more esoteric data coercion (2.12) + /********************************************************** + */ + + /** + * Method to call in case incoming shape is Object Value (and parser thereby + * points to {@link com.fasterxml.jackson.core.JsonToken#START_OBJECT} token), + * but a Scalar value (potentially coercible from String value) is expected. + * This would typically be used to deserializer a Number, Boolean value or some other + * "simple" unstructured value type. + * + * @param p Actual parser to read content from + * @param ctxt Deserialization context + * @param deser Deserializer that needs extracted String value + * + * @return String value found; not {@code null} (exception should be thrown if no suitable + * value found) + * + * @throws IOException If there are problems either reading content (underlying parser + * problem) or finding expected scalar value + */ + public String extractScalarFromObject(JsonParser p, DeserializationContext ctxt, + JsonDeserializer<?> deser) + throws IOException + { + return null; + } + + /* + /********************************************************** /* Convenience methods for reading parsed values /********************************************************** */ @@ -2010,8 +2040,12 @@ trailingToken, ClassUtil.nameOf(targetType) /********************************************************** */ - protected DateFormat getDateFormat() - { + @Deprecated // since 2.12, remove from 2.13 or later + protected DateFormat getDateFormat() { + return _getDateFormat(); + } + + protected DateFormat _getDateFormat() { if (_dateFormat != null) { return _dateFormat; } diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java index 756a95ecc..281e02eee 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java @@ -538,22 +538,7 @@ public class NumberDeserializers if (_checkTextualNull(ctxt, text)) { return (Integer) getNullValue(ctxt); } - final int len = text.length(); - try { - if (len > 9) { - long l = Long.parseLong(text); - if (_intOverflow(l)) { - return (Integer) ctxt.handleWeirdStringValue(_valueClass, text, String.format( - "Overflow: numeric value (%s) out of range of Integer (%d - %d)", - text, Integer.MIN_VALUE, Integer.MAX_VALUE)); - } - return Integer.valueOf((int) l); - } - return Integer.valueOf(NumberInput.parseInt(text)); - } catch (IllegalArgumentException iae) { - return (Integer) ctxt.handleWeirdStringValue(_valueClass, text, - "not a valid Integer value"); - } + return _parseIntPrimitive(ctxt, text); case JsonTokenId.ID_NUMBER_FLOAT: // coercing may work too act = _checkFloatToIntCoercion(p, ctxt, _valueClass); if (act == CoercionAction.AsNull) { @@ -621,11 +606,7 @@ public class NumberDeserializers return (Long) getNullValue(ctxt); } // let's allow Strings to be converted too - try { - return Long.valueOf(NumberInput.parseLong(text)); - } catch (IllegalArgumentException iae) { } - return (Long) ctxt.handleWeirdStringValue(_valueClass, text, - "not a valid Long value"); + return _parseLongPrimitive(ctxt, text); case JsonTokenId.ID_NUMBER_FLOAT: act = _checkFloatToIntCoercion(p, ctxt, _valueClass); if (act == CoercionAction.AsNull) { diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java index c0f9875d4..1c82322e3 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java @@ -643,11 +643,6 @@ public abstract class StdDeserializer<T> { CoercionAction act; switch (p.currentTokenId()) { - case JsonTokenId.ID_NUMBER_INT: - return p.getIntValue(); - case JsonTokenId.ID_NULL: - _verifyNullForPrimitive(ctxt); - return 0; case JsonTokenId.ID_STRING: String text = p.getText(); act = _checkFromStringCoercion(ctxt, text, @@ -681,6 +676,11 @@ public abstract class StdDeserializer<T> return parsed; } break; + case JsonTokenId.ID_NUMBER_INT: + return p.getIntValue(); + case JsonTokenId.ID_NULL: + _verifyNullForPrimitive(ctxt); + return 0; default: } // Otherwise, no can do: |