diff options
-rw-r--r-- | release-notes/VERSION-2.x | 3 | ||||
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java | 17 | ||||
-rw-r--r-- | src/test/java/com/fasterxml/jackson/databind/struct/UnwrapSingleArrayMiscTest.java (renamed from src/test/java/com/fasterxml/jackson/failing/UnwrapSingleArrayMiscTest.java) | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index d30fc8eac..d9e94a5b0 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -20,6 +20,9 @@ Project: jackson-databind #2760: Jackson doesn't respect `CAN_OVERRIDE_ACCESS_MODIFIERS=false` for deserializer properties (reported by Johannes K) +#2767: `DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS` don't support `Map` + type field + (reported by abomb4@github) #2770: JsonParser from MismatchedInputException cannot getText() for floating-point value (reported by João G) 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) { diff --git a/src/test/java/com/fasterxml/jackson/failing/UnwrapSingleArrayMiscTest.java b/src/test/java/com/fasterxml/jackson/databind/struct/UnwrapSingleArrayMiscTest.java index f00485e49..6167862f3 100644 --- a/src/test/java/com/fasterxml/jackson/failing/UnwrapSingleArrayMiscTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/struct/UnwrapSingleArrayMiscTest.java @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.failing; +package com.fasterxml.jackson.databind.struct; import java.util.Collections; import java.util.EnumMap; |