aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release-notes/VERSION-2.x3
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/MapDeserializer.java17
-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;