Skip to content

Commit a0a5397

Browse files
author
Eugen
committed
Merge pull request eugenp#22 from rachelshu/master
Map ignore null value and null key serializer
2 parents 0c7f708 + a1ff4c6 commit a0a5397

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baeldung.jackson.dtos;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonGenerator;
6+
import com.fasterxml.jackson.core.JsonProcessingException;
7+
import com.fasterxml.jackson.databind.JsonSerializer;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
public class MyDtoNullKeySerializer extends JsonSerializer<Object> {
11+
12+
@Override
13+
public void serialize(final Object value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
14+
15+
jgen.writeFieldName("");
16+
17+
}
18+
19+
}

jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import static org.junit.Assert.assertThat;
66

77
import java.io.IOException;
8+
import java.util.HashMap;
9+
import java.util.Map;
810

911
import org.baeldung.jackson.dtos.MyDto;
1012
import org.baeldung.jackson.dtos.MyDtoIncludeNonDefault;
13+
import org.baeldung.jackson.dtos.MyDtoNullKeySerializer;
1114
import org.baeldung.jackson.dtos.MyDtoWithFilter;
1215
import org.baeldung.jackson.dtos.MyMixInForString;
1316
import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreField;
@@ -20,6 +23,7 @@
2023
import com.fasterxml.jackson.core.JsonParseException;
2124
import com.fasterxml.jackson.core.JsonProcessingException;
2225
import com.fasterxml.jackson.databind.ObjectMapper;
26+
import com.fasterxml.jackson.databind.SerializationFeature;
2327
import com.fasterxml.jackson.databind.SerializerProvider;
2428
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
2529
import com.fasterxml.jackson.databind.ser.FilterProvider;
@@ -183,4 +187,79 @@ public final void givenIgnoringNullFieldsGlobally_whenWritingObjectWithNullField
183187
System.out.println(dtoAsString);
184188
}
185189

190+
@Test
191+
public final void givenIgnoringMapNullValue_whenWritingMapObjectWithNullValue_thenIgnored() throws JsonProcessingException {
192+
final ObjectMapper mapper = new ObjectMapper();
193+
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
194+
195+
final MyDto dtoObject1 = new MyDto();
196+
197+
final Map<String, MyDto> dtoMap = new HashMap<String, MyDto>();
198+
dtoMap.put("dtoObject1", dtoObject1);
199+
dtoMap.put("dtoObject2", null);
200+
201+
final String dtoMapAsString = mapper.writeValueAsString(dtoMap);
202+
203+
assertThat(dtoMapAsString, containsString("dtoObject1"));
204+
assertThat(dtoMapAsString, not(containsString("dtoObject2")));
205+
System.out.println(dtoMapAsString);
206+
}
207+
208+
@Test
209+
public final void givenIgnoringMapValueObjectWithNullField_whenWritingMapValueObjectWithNullField_thenIgnored() throws JsonProcessingException {
210+
final ObjectMapper mapper = new ObjectMapper();
211+
mapper.setSerializationInclusion(Include.NON_NULL);
212+
213+
final MyDto dtoObject = new MyDto();
214+
215+
final Map<String, MyDto> dtoMap = new HashMap<String, MyDto>();
216+
dtoMap.put("dtoObject", dtoObject);
217+
218+
final String dtoMapAsString = mapper.writeValueAsString(dtoMap);
219+
220+
assertThat(dtoMapAsString, containsString("dtoObject"));
221+
assertThat(dtoMapAsString, not(containsString("stringValue")));
222+
System.out.println(dtoMapAsString);
223+
}
224+
225+
@Test
226+
public final void givenAllowingMapObjectWithNullKey_whenWritingMapObjectWithNullKey_thenAllowed() throws JsonProcessingException {
227+
final ObjectMapper mapper = new ObjectMapper();
228+
mapper.getSerializerProvider().setNullKeySerializer(new MyDtoNullKeySerializer());
229+
230+
final MyDto dtoObject = new MyDto();
231+
dtoObject.setStringValue("dtoObjectString");
232+
233+
final Map<String, MyDto> dtoMap = new HashMap<String, MyDto>();
234+
dtoMap.put(null, dtoObject);
235+
236+
final String dtoMapAsString = mapper.writeValueAsString(dtoMap);
237+
238+
assertThat(dtoMapAsString, containsString(""));
239+
assertThat(dtoMapAsString, containsString("dtoObjectString"));
240+
System.out.println(dtoMapAsString);
241+
}
242+
243+
@Test
244+
public final void givenAllowingMapObjectOneNullKey_whenWritingMapObjectWithTwoNullKeys_thenOverride() throws JsonProcessingException {
245+
final ObjectMapper mapper = new ObjectMapper();
246+
mapper.getSerializerProvider().setNullKeySerializer(new MyDtoNullKeySerializer());
247+
248+
final MyDto dtoObject1 = new MyDto();
249+
dtoObject1.setStringValue("dtoObject1String");
250+
251+
final MyDto dtoObject2 = new MyDto();
252+
dtoObject2.setStringValue("dtoObject2String");
253+
254+
final Map<String, MyDto> dtoMap = new HashMap<String, MyDto>();
255+
dtoMap.put(null, dtoObject1);
256+
dtoMap.put(null, dtoObject2);
257+
258+
final String dtoMapAsString = mapper.writeValueAsString(dtoMap);
259+
260+
assertThat(dtoMapAsString, not(containsString("dtoObject1String")));
261+
assertThat(dtoMapAsString, containsString("dtoObject2String"));
262+
System.out.println(dtoMapAsString);
263+
}
264+
186265
}

0 commit comments

Comments
 (0)