Skip to content
This repository was archived by the owner on Nov 7, 2019. It is now read-only.

Commit e74927b

Browse files
committed
Merge pull request #56 from sandermak/master
Handle JSON serialized Dates from JavaScript in LocalDateDeserializer
2 parents 34f2c20 + 62c50cf commit e74927b

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/LocalDateDeserializer.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
package com.fasterxml.jackson.datatype.jsr310.deser;
1818

1919
import java.io.IOException;
20+
import java.time.Instant;
2021
import java.time.LocalDate;
22+
import java.time.LocalDateTime;
23+
import java.time.ZoneOffset;
2124
import java.time.format.DateTimeFormatter;
2225

2326
import com.fasterxml.jackson.core.*;
@@ -64,9 +67,14 @@ public LocalDate deserialize(JsonParser parser, DeserializationContext context)
6467
// if we are using default formatter
6568
DateTimeFormatter format = _formatter;
6669
if (format == DEFAULT_FORMATTER) {
67-
if (string.contains("T")) {
68-
return LocalDate.parse(string, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
69-
}
70+
// JavaScript by default includes time in JSON serialized Dates (UTC/ISO instant format).
71+
if (string.length() > 10 && string.charAt(10) == 'T') {
72+
if (string.endsWith("Z")) {
73+
return LocalDateTime.ofInstant(Instant.parse(string), ZoneOffset.UTC).toLocalDate();
74+
} else {
75+
return LocalDate.parse(string, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
76+
}
77+
}
7078
}
7179
return LocalDate.parse(string, format);
7280
}

src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateSerialization.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
import static org.junit.Assert.assertTrue;
2222

2323
import java.time.format.DateTimeParseException;
24+
import java.time.Instant;
2425
import java.time.LocalDate;
2526
import java.time.LocalDateTime;
2627
import java.time.Month;
28+
import java.time.ZoneOffset;
2729
import java.time.temporal.Temporal;
2830

2931
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -171,6 +173,16 @@ public void testDeserializationAsString04() throws Exception
171173
this.MAPPER.readValue("\"2015-06-19TShouldNotParse\"", LocalDate.class);
172174
}
173175

176+
@Test
177+
public void testDeserializationAsString05() throws Exception
178+
{
179+
Instant instant = Instant.now();
180+
LocalDate value = MAPPER.readValue('"' + instant.toString() + '"', LocalDate.class);
181+
182+
assertNotNull("The value should not be null.", value);
183+
assertEquals("The value is not correct.", LocalDateTime.ofInstant(instant, ZoneOffset.UTC).toLocalDate(), value);
184+
}
185+
174186
@Test
175187
public void testDeserializationWithTypeInfo01() throws Exception
176188
{

0 commit comments

Comments
 (0)