aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/fasterxml
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-29 12:23:19 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-29 12:23:19 -0700
commitb5dbb0acc47980a619d25ef7c38681833cec5288 (patch)
tree2a8385c5ccaf6ff1776694ca256b713f3d270e45 /src/main/java/com/fasterxml
parentd1591a524c9292613f8873271d2db400362e31d3 (diff)
downloadjackson-databind-b5dbb0acc47980a619d25ef7c38681833cec5288.tar.gz
Minor refactoring, preparing for "extract-scalar-from-Object" support
Diffstat (limited to 'src/main/java/com/fasterxml')
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java40
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java23
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java10
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: