Skip to content

Commit d94149d

Browse files
authored
Merge pull request #170 from kitherill/bugfix/time_of_day_deseralization
Fix for #168 TimeOfDay deseralization
2 parents 7675bfd + acee121 commit d94149d

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

src/main/java/com/microsoft/graph/models/extensions/TimeOfDay.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.microsoft.graph.models.extensions;
22

33

4+
import java.math.BigDecimal;
45
import java.text.ParseException;
56
import java.util.Locale;
67

@@ -51,7 +52,7 @@ public static TimeOfDay parse(final String timeStr) throws ParseException {
5152
// unpack this array
5253
int hour = Integer.parseInt(timeInfo[indHour]);
5354
int minute = Integer.parseInt(timeInfo[indMinute]);
54-
int second = Integer.parseInt(timeInfo[indSecond]);
55+
int second = new BigDecimal(timeInfo[indSecond]).intValue();
5556

5657
return new TimeOfDay(hour, minute, second);
5758
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.microsoft.graph.logger.ILogger;
3535
import com.microsoft.graph.models.extensions.DateOnly;
3636

37+
import com.microsoft.graph.models.extensions.TimeOfDay;
3738
import java.lang.reflect.Type;
3839
import java.text.ParseException;
3940
import java.util.Calendar;
@@ -209,6 +210,20 @@ public Duration deserialize(final JsonElement json,
209210
}
210211
}
211212
};
213+
214+
final JsonDeserializer<TimeOfDay> timeOfDayJsonDeserializer = new JsonDeserializer<TimeOfDay>() {
215+
@Override
216+
public TimeOfDay deserialize(final JsonElement json,
217+
final Type typeOfT,
218+
final JsonDeserializationContext context) throws JsonParseException {
219+
try {
220+
return TimeOfDay.parse(json.getAsString());
221+
} catch (Exception e) {
222+
return null;
223+
}
224+
}
225+
};
226+
212227
return new GsonBuilder()
213228
.excludeFieldsWithoutExposeAnnotation()
214229
.registerTypeAdapter(Calendar.class, calendarJsonSerializer)
@@ -223,6 +238,7 @@ public Duration deserialize(final JsonElement json,
223238
.registerTypeAdapter(EnumSet.class, enumSetJsonDeserializer)
224239
.registerTypeAdapter(Duration.class, durationJsonSerializer)
225240
.registerTypeAdapter(Duration.class, durationJsonDeserializer)
241+
.registerTypeAdapter(TimeOfDay.class, timeOfDayJsonDeserializer)
226242
.registerTypeAdapterFactory(new FallbackTypeAdapterFactory(logger))
227243
.create();
228244
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,12 @@ public void testTimeOfDayDeserializerIndefinite() throws Exception{
3636
assertEquals(1, time.getSecond());
3737
}
3838

39+
@Test
40+
public void testTimeOfDayDeserializerWithFraction() throws Exception{
41+
TimeOfDay time = TimeOfDay.parse("12:30:44.0000000");
42+
assertEquals(12, time.getHour());
43+
assertEquals(30, time.getMinute());
44+
assertEquals(44, time.getSecond());
45+
}
46+
3947
}

0 commit comments

Comments
 (0)