diff options
author | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-18 20:14:33 -0700 |
---|---|---|
committer | Tatu Saloranta <tatu.saloranta@iki.fi> | 2020-06-18 20:14:33 -0700 |
commit | 987ab8c97b4f5308f8e016052c75fa09d7ee8725 (patch) | |
tree | e72d069440a69d5fff4d5c1848681bc026f2b6cf /src/main/java | |
parent | 330d0b6a1565586ea49ed5cf28cf25e68dd1b172 (diff) | |
download | jackson-databind-987ab8c97b4f5308f8e016052c75fa09d7ee8725.tar.gz |
Fixed #2767
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java index fccdf1aab..b99f66968 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java @@ -356,8 +356,21 @@ public class MapDeserializer if (t == JsonToken.VALUE_STRING) { return (Map<Object,Object>) _valueInstantiator.createFromString(ctxt, p.getText()); } - // slightly redundant (since String was passed above), but also handles empty array case: - return _deserializeFromEmpty(p, ctxt); + if (t == JsonToken.START_ARRAY) { + if (p.nextToken() == JsonToken.END_ARRAY) { + if (ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT)) { + return null; + } + } else if (ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) { + final Object value = deserialize(p, ctxt); + if (p.nextToken() != JsonToken.END_ARRAY) { + handleMissingEndArrayForSingle(p, ctxt); + } + return (Map<Object,Object>) value; + } + // fall through to failing case + } + return (Map<Object,Object>) ctxt.handleUnexpectedToken(getValueType(ctxt), t, p, null); } final Map<Object,Object> result = (Map<Object,Object>) _valueInstantiator.createUsingDefault(ctxt); if (_standardStringKey) { |