From a1ff4c69002a92cf28a45e50f59ca88fac03ac57 Mon Sep 17 00:00:00 2001 From: Rachel Shu Date: Wed, 25 Jun 2014 07:06:38 -0400 Subject: [PATCH] Map ignore null value and null key serializer --- .../jackson/dtos/MyDtoNullKeySerializer.java | 19 +++++ .../JacksonSerializationIgnoreUnitTest.java | 79 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNullKeySerializer.java diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNullKeySerializer.java b/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNullKeySerializer.java new file mode 100644 index 0000000000..ab8ac6249d --- /dev/null +++ b/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNullKeySerializer.java @@ -0,0 +1,19 @@ +package org.baeldung.jackson.dtos; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +public class MyDtoNullKeySerializer extends JsonSerializer { + + @Override + public void serialize(final Object value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { + + jgen.writeFieldName(""); + + } + +} diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java b/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java index 062bcc99df..c973584f9b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java @@ -5,9 +5,12 @@ import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import org.baeldung.jackson.dtos.MyDto; import org.baeldung.jackson.dtos.MyDtoIncludeNonDefault; +import org.baeldung.jackson.dtos.MyDtoNullKeySerializer; import org.baeldung.jackson.dtos.MyDtoWithFilter; import org.baeldung.jackson.dtos.MyMixInForString; import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreField; @@ -20,6 +23,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.FilterProvider; @@ -183,4 +187,79 @@ public class JacksonSerializationIgnoreUnitTest { System.out.println(dtoAsString); } + @Test + public final void givenIgnoringMapNullValue_whenWritingMapObjectWithNullValue_thenIgnored() throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper(); + mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); + + final MyDto dtoObject1 = new MyDto(); + + final Map dtoMap = new HashMap(); + dtoMap.put("dtoObject1", dtoObject1); + dtoMap.put("dtoObject2", null); + + final String dtoMapAsString = mapper.writeValueAsString(dtoMap); + + assertThat(dtoMapAsString, containsString("dtoObject1")); + assertThat(dtoMapAsString, not(containsString("dtoObject2"))); + System.out.println(dtoMapAsString); + } + + @Test + public final void givenIgnoringMapValueObjectWithNullField_whenWritingMapValueObjectWithNullField_thenIgnored() throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_NULL); + + final MyDto dtoObject = new MyDto(); + + final Map dtoMap = new HashMap(); + dtoMap.put("dtoObject", dtoObject); + + final String dtoMapAsString = mapper.writeValueAsString(dtoMap); + + assertThat(dtoMapAsString, containsString("dtoObject")); + assertThat(dtoMapAsString, not(containsString("stringValue"))); + System.out.println(dtoMapAsString); + } + + @Test + public final void givenAllowingMapObjectWithNullKey_whenWritingMapObjectWithNullKey_thenAllowed() throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper(); + mapper.getSerializerProvider().setNullKeySerializer(new MyDtoNullKeySerializer()); + + final MyDto dtoObject = new MyDto(); + dtoObject.setStringValue("dtoObjectString"); + + final Map dtoMap = new HashMap(); + dtoMap.put(null, dtoObject); + + final String dtoMapAsString = mapper.writeValueAsString(dtoMap); + + assertThat(dtoMapAsString, containsString("")); + assertThat(dtoMapAsString, containsString("dtoObjectString")); + System.out.println(dtoMapAsString); + } + + @Test + public final void givenAllowingMapObjectOneNullKey_whenWritingMapObjectWithTwoNullKeys_thenOverride() throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper(); + mapper.getSerializerProvider().setNullKeySerializer(new MyDtoNullKeySerializer()); + + final MyDto dtoObject1 = new MyDto(); + dtoObject1.setStringValue("dtoObject1String"); + + final MyDto dtoObject2 = new MyDto(); + dtoObject2.setStringValue("dtoObject2String"); + + final Map dtoMap = new HashMap(); + dtoMap.put(null, dtoObject1); + dtoMap.put(null, dtoObject2); + + final String dtoMapAsString = mapper.writeValueAsString(dtoMap); + + assertThat(dtoMapAsString, not(containsString("dtoObject1String"))); + assertThat(dtoMapAsString, containsString("dtoObject2String")); + System.out.println(dtoMapAsString); + } + }