From d6d421cb36e9130c5fe683b2b4672cd468bb6557 Mon Sep 17 00:00:00 2001 From: Alexey Vinogradov Date: Wed, 18 May 2022 22:49:27 +0700 Subject: [PATCH] fix #3489 I've added the empty value to the Object deserializer in maps as `new Object();`. --- .../deser/std/UntypedObjectDeserializer.java | 5 +++++ .../filter/NullConversionsForContentTest.java | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java index 46df6cf62b..b29b9fbfd3 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.java @@ -755,6 +755,11 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx return ctxt.handleUnexpectedToken(Object.class, p); } + @Override + public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException { + return new Object(); + } + @Override public Object deserializeWithType(JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException { diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/filter/NullConversionsForContentTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/filter/NullConversionsForContentTest.java index 6b43908828..f0ab4066a0 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/filter/NullConversionsForContentTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/filter/NullConversionsForContentTest.java @@ -1,13 +1,16 @@ package com.fasterxml.jackson.databind.deser.filter; -import java.util.*; - import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.BaseMapTest; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.exc.InvalidNullException; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; + // For [databind#1402]; configurable null handling, for contents of // Collections, Maps, arrays public class NullConversionsForContentTest extends BaseMapTest @@ -297,6 +300,15 @@ public void testNullsAsEmptyWithMaps() throws Exception assertEquals(ABC.A, result.values.entrySet().iterator().next().getKey()); assertEquals("", result.values.entrySet().iterator().next().getValue()); } + + // Then: Map + { + NullContentAsEmpty> result + = MAPPER.readValue(MAP_JSON, new TypeReference>>() { }); + assertEquals(1, result.values.size()); + assertEquals("A", result.values.entrySet().iterator().next().getKey()); + assertNotNull(result.values.entrySet().iterator().next().getValue()); + } } /*