aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-18 20:14:33 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-18 20:14:33 -0700
commit987ab8c97b4f5308f8e016052c75fa09d7ee8725 (patch)
treee72d069440a69d5fff4d5c1848681bc026f2b6cf /src/main/java
parent330d0b6a1565586ea49ed5cf28cf25e68dd1b172 (diff)
downloadjackson-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.java17
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) {