diff --git a/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java b/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java index 95eb42be..3ce97fe8 100644 --- a/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java @@ -84,6 +84,10 @@ final class DefaultDateTypeAdapter extends TypeAdapter { // See issue 162 @Override public void write(JsonWriter out, Date value) throws IOException { + if (value == null) { + out.nullValue(); + return; + } synchronized (localFormat) { String dateFormatAsString = enUsFormat.format(value); out.value(dateFormatAsString); @@ -92,8 +96,9 @@ final class DefaultDateTypeAdapter extends TypeAdapter { @Override public Date read(JsonReader in) throws IOException { - if (in.peek() != JsonToken.STRING) { - throw new JsonParseException("The date should be a string value"); + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; } Date date = deserializeToDate(in.nextString()); if (dateType == Date.class) { diff --git a/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java b/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java index b3ee5a6f..3c787a66 100644 --- a/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java @@ -161,6 +161,20 @@ public class DefaultDateTypeAdapterTest extends TestCase { } catch (IllegalArgumentException expected) { } } + public void testNullValue() throws Exception { + DefaultDateTypeAdapter adapter = new DefaultDateTypeAdapter(Date.class); + assertNull(adapter.fromJson("null")); + assertEquals("null", adapter.toJson(null)); + } + + public void testUnexpectedToken() throws Exception { + try { + DefaultDateTypeAdapter adapter = new DefaultDateTypeAdapter(Date.class); + adapter.fromJson("{}"); + fail("Unexpected token should fail."); + } catch (IllegalStateException expected) { } + } + private void assertFormatted(String formatted, DefaultDateTypeAdapter adapter) { assertEquals(toLiteral(formatted), adapter.toJson(new Date(0))); }