Skip to content

Commit 05d8780

Browse files
committed
Fix #78
1 parent 4ecf483 commit 05d8780

File tree

5 files changed

+50
-6
lines changed

5 files changed

+50
-6
lines changed

datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserializer.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.fasterxml.jackson.core.JsonParser;
2020
import com.fasterxml.jackson.core.JsonToken;
2121
import com.fasterxml.jackson.databind.DeserializationContext;
22+
import com.fasterxml.jackson.databind.JsonDeserializer;
2223

2324
import java.io.IOException;
2425
import java.time.DateTimeException;
@@ -31,22 +32,24 @@
3132
* @author Nick Williams
3233
* @since 2.2
3334
*/
34-
public class YearDeserializer extends JSR310DeserializerBase<Year>
35+
public class YearDeserializer extends JSR310DateTimeDeserializerBase<Year>
3536
{
3637
private static final long serialVersionUID = 1L;
3738

3839
public static final YearDeserializer INSTANCE = new YearDeserializer();
3940

40-
private final DateTimeFormatter _formatter;
41-
4241
private YearDeserializer()
4342
{
4443
this(null);
4544
}
4645

4746
public YearDeserializer(DateTimeFormatter formatter) {
48-
super(Year.class);
49-
_formatter = formatter;
47+
super(Year.class, formatter);
48+
}
49+
50+
@Override
51+
protected JsonDeserializer<Year> withDateFormat(DateTimeFormatter dtf) {
52+
return new YearDeserializer(dtf);
5053
}
5154

5255
@Override

datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/TestLocalDateTimeDeserialization.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.JsonParser;
44
import com.fasterxml.jackson.core.JsonProcessingException;
55
import com.fasterxml.jackson.core.JsonToken;
6+
67
import com.fasterxml.jackson.databind.DeserializationContext;
78
import com.fasterxml.jackson.databind.DeserializationFeature;
89
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -13,7 +14,6 @@
1314
import org.junit.Test;
1415

1516
import java.io.IOException;
16-
import java.time.LocalDate;
1717
import java.time.LocalDateTime;
1818
import java.time.Month;
1919
import java.time.format.DateTimeParseException;

datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/deser/YearDeserTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Year;
2020
import java.time.temporal.Temporal;
2121

22+
import com.fasterxml.jackson.annotation.JsonFormat;
2223
import com.fasterxml.jackson.databind.ObjectMapper;
2324
import com.fasterxml.jackson.datatype.jsr310.MockObjectConfiguration;
2425
import com.fasterxml.jackson.datatype.jsr310.ModuleTestBase;
@@ -30,6 +31,16 @@
3031

3132
public class YearDeserTest extends ModuleTestBase
3233
{
34+
static class FormattedYear {
35+
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "'Y'yyyy")
36+
public Year value;
37+
38+
protected FormattedYear() {}
39+
public FormattedYear(Year year) {
40+
value = year;
41+
}
42+
}
43+
3344
private final ObjectMapper MAPPER = newMapper();
3445

3546
@Test
@@ -50,4 +61,27 @@ public void testDeserializationWithTypeInfo() throws Exception
5061
assertTrue("The value should be a Year.", value instanceof Year);
5162
assertEquals("The value is not correct.", Year.of(2005), value);
5263
}
64+
65+
@Test
66+
public void testWithCustomFormat() throws Exception
67+
{
68+
FormattedYear input = new FormattedYear(Year.of(2018));
69+
String json = MAPPER.writeValueAsString(input);
70+
assertEquals("{\"value\":\"Y2018\"}", json);
71+
FormattedYear result = MAPPER.readValue(json, FormattedYear.class);
72+
assertEquals(input.value, result.value);
73+
}
74+
75+
@Test
76+
public void testWithFormatViaConfigOverride() throws Exception
77+
{
78+
ObjectMapper mapper = newMapper();
79+
mapper.configOverride(Year.class)
80+
.setFormat(JsonFormat.Value.forPattern("'X'yyyy"));
81+
Year input = Year.of(2018);
82+
String json = mapper.writeValueAsString(input);
83+
assertEquals("\"X2018\"", json);
84+
Year result = mapper.readValue(json, Year.class);
85+
assertEquals(input, result);
86+
}
5387
}

release-notes/CREDITS-2.x

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ Sonny Gill (sonnygill@github)
3636
#67: `ParameterNamesModule` does not deserialize with a single parameter
3737
constructor when using `SnakeCase` `PropertyNamingStrategy`
3838
(2.9.6)
39+
40+
Adrian Palanques (devdevx@github)
41+
#78: Year deserialization ignores `@JsonFormat` pattern
42+
(2.9.7)

release-notes/VERSION-2.x

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ Modules:
1010

1111
2.9.7 (not yet released)
1212

13+
#78: Year deserialization ignores `@JsonFormat` pattern
14+
(reported, fixed by Adrian P)
15+
1316
2.9.6 (12-Jun-2018)
1417

1518
#65: Use `DeserializationContext.handleWeirdXxxValue()` for datetime deserializers

0 commit comments

Comments
 (0)