Skip to content

Commit 161fa3e

Browse files
committed
Add support to set a setting to serialize null values using the DefaultSerializer and GSONFactory
1 parent c9c2f8c commit 161fa3e

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed

src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,21 @@ public class DefaultSerializer implements ISerializer {
6565
* @param logger the logger
6666
*/
6767
public DefaultSerializer(@Nonnull final ILogger logger) {
68-
this.logger = Objects.requireNonNull(logger, "parameter logger cannot be null");
69-
this.gson = GsonFactory.getGsonInstance(logger);
68+
this(false, logger);
7069
}
7170

71+
72+
/**
73+
* Creates a DefaultSerializer with an option to enable serializing of the null values.
74+
*
75+
* @param serializeNulls the setting of whether or not to serialize the null values in the JSON object
76+
* @param logger the logger
77+
*/
78+
public DefaultSerializer(@Nonnull final boolean serializeNulls, @Nonnull final ILogger logger) {
79+
this.logger = Objects.requireNonNull(logger, "parameter logger cannot be null");
80+
this.gson = GsonFactory.getGsonInstance(serializeNulls, logger);
81+
}
82+
7283
@Override
7384
@Nullable
7485
public <T> T deserializeObject(@Nonnull final String inputString, @Nonnull final Class<T> clazz, @Nullable final Map<String, List<String>> responseHeaders) {

src/main/java/com/microsoft/graph/serializer/GsonFactory.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,17 @@ private GsonFactory() {
6969
* @return the new instance
7070
*/
7171
public static Gson getGsonInstance(final ILogger logger) {
72+
return getGsonInstance(false, logger);
73+
}
74+
75+
/**
76+
* Creates an instance of GSON
77+
*
78+
* @param serializeNulls the setting of whether or not to serialize the null values in the JSON object
79+
* @param logger the logger
80+
* @return the new instance
81+
*/
82+
public static Gson getGsonInstance(final boolean serializeNulls, final ILogger logger) {
7283

7384
final JsonSerializer<OffsetDateTime> calendarJsonSerializer = new JsonSerializer<OffsetDateTime>() {
7485
@Override
@@ -328,7 +339,11 @@ public Float deserialize(final JsonElement json,
328339
}
329340
};
330341

331-
return new GsonBuilder()
342+
GsonBuilder builder = new GsonBuilder();
343+
if(serializeNulls) {
344+
builder.serializeNulls();
345+
}
346+
return builder
332347
.excludeFieldsWithoutExposeAnnotation()
333348
.registerTypeAdapter(Boolean.class, booleanJsonDeserializer)
334349
.registerTypeAdapter(String.class, stringJsonDeserializer)

src/test/java/com/microsoft/graph/serializer/DefaultSerializerTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.gson.Gson;
44
import com.google.gson.JsonElement;
55
import com.microsoft.graph.logger.ILogger;
6+
import com.microsoft.graph.models.MessageStub;
67
import com.microsoft.graph.models.ReactionStub;
78
import com.microsoft.graph.models.SubReactionStub1;
89
import org.junit.jupiter.api.Test;
@@ -17,6 +18,7 @@ public class DefaultSerializerTest {
1718
final ILogger logger = mock(ILogger.class);
1819
Gson gson = GsonFactory.getGsonInstance(logger);
1920
DefaultSerializer defaultSerializer = new DefaultSerializer(logger);
21+
DefaultSerializer defaultNullSerializer = new DefaultSerializer(true, logger);
2022

2123
@Test
2224
public void testDeserializationOfObjectWithODataTypeProperty() {
@@ -33,4 +35,32 @@ public void testDeserializationOfObjectWithODataTypeProperty() {
3335
Mockito.verify(reaction.additionalDataManager()).setAdditionalData(gson.fromJson(testJsonResponse, JsonElement.class).getAsJsonObject());
3436
}
3537

38+
@Test
39+
public void testDefaultSerializerDoesNotIncludeNullValuesByDefault() {
40+
// Given
41+
final String testJsonResponse =
42+
"{\"@odata.type\": \"#microsoft.graph.messageStub\", \"body\": null}";
43+
44+
// When
45+
DefaultSerializer nonNullSerializer = new DefaultSerializer(logger);
46+
MessageStub message = nonNullSerializer.deserializeObject(testJsonResponse, MessageStub.class);
47+
48+
// Then
49+
assertEquals("{}", nonNullSerializer.serializeObject(message));
50+
}
51+
52+
@Test
53+
public void testDefaultNullSerializerDoesIncludeNullValues() {
54+
// Given
55+
final String testJsonResponse =
56+
"{\"@odata.type\": \"#microsoft.graph.messageStub\",\"body\":null}";
57+
58+
// When
59+
DefaultSerializer nullSerializer = new DefaultSerializer(true, logger);
60+
MessageStub message = nullSerializer.deserializeObject(testJsonResponse, MessageStub.class);
61+
62+
// Then
63+
assertEquals("{\"body\":null,\"reaction\":null}", nullSerializer.serializeObject(message));
64+
}
65+
3666
}

0 commit comments

Comments
 (0)