Skip to content

Commit 0b706bb

Browse files
committed
Merge pull request #81 from joschi/additional-key-serializers
Add key deserializers for Duration and Period classes
2 parents 00689a9 + 692b3f4 commit 0b706bb

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ public JodaModule()
5555
addKeyDeserializer(LocalTime.class, new LocalTimeKeyDeserializer());
5656
addKeyDeserializer(LocalDate.class, new LocalDateKeyDeserializer());
5757
addKeyDeserializer(LocalDateTime.class, new LocalDateTimeKeyDeserializer());
58+
addKeyDeserializer(Duration.class, new DurationKeyDeserializer());
59+
addKeyDeserializer(Period.class, new PeriodKeyDeserializer());
5860

5961
// 26-Dec-2015, tatu: Joda has deprecated following types:
6062

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.fasterxml.jackson.datatype.joda.deser.key;
2+
3+
import com.fasterxml.jackson.databind.DeserializationContext;
4+
import org.joda.time.Duration;
5+
6+
import java.io.IOException;
7+
8+
public class DurationKeyDeserializer extends JodaKeyDeserializer {
9+
private static final long serialVersionUID = 1L;
10+
11+
@Override
12+
protected Duration deserialize(String key, DeserializationContext ctxt) throws IOException {
13+
return Duration.parse(key);
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.fasterxml.jackson.datatype.joda.deser.key;
2+
3+
import com.fasterxml.jackson.databind.DeserializationContext;
4+
import org.joda.time.Period;
5+
6+
import java.io.IOException;
7+
8+
public class PeriodKeyDeserializer extends JodaKeyDeserializer {
9+
private static final long serialVersionUID = 1L;
10+
11+
@Override
12+
protected Period deserialize(String key, DeserializationContext ctxt) throws IOException {
13+
return Period.parse(key);
14+
}
15+
}

src/test/java/com/fasterxml/jackson/datatype/joda/deser/MiscDeserializationTest.java

+14
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,20 @@ public void testLocalDateTimeKeyDeserialize() throws IOException {
543543
assertNotNull(map);
544544
assertTrue(map.containsKey(LocalDateTime.parse("2014-05-23T00:00:00.000")));
545545
}
546+
public void testDurationKeyDeserialize() throws IOException {
547+
548+
final String json = "{" + quote("PT60s") + ":0}";
549+
final Map<Duration, Long> map = MAPPER.readValue(json, new TypeReference<Map<Duration, String>>() { });
550+
assertNotNull(map);
551+
assertTrue(map.containsKey(Duration.standardMinutes(1L)));
552+
}
553+
public void testPeriodKeyDeserialize() throws IOException {
554+
555+
final String json = "{" + quote("PT1H2M3.004S") + ":0}";
556+
final Map<Period, Long> map = MAPPER.readValue(json, new TypeReference<Map<Period, String>>() { });
557+
assertNotNull(map);
558+
assertTrue(map.containsKey(new Period(1, 2, 3, 4)));
559+
}
546560

547561
public void testDeserMonthDay() throws Exception
548562
{

0 commit comments

Comments
 (0)