diff --git a/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java b/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java index ff40a99d..6d1dd5ce 100644 --- a/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java +++ b/src/main/java/com/fasterxml/jackson/datatype/joda/JodaModule.java @@ -55,6 +55,8 @@ public JodaModule() addKeyDeserializer(LocalTime.class, new LocalTimeKeyDeserializer()); addKeyDeserializer(LocalDate.class, new LocalDateKeyDeserializer()); addKeyDeserializer(LocalDateTime.class, new LocalDateTimeKeyDeserializer()); + addKeyDeserializer(Duration.class, new DurationKeyDeserializer()); + addKeyDeserializer(Period.class, new PeriodKeyDeserializer()); // 26-Dec-2015, tatu: Joda has deprecated following types: diff --git a/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/DurationKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/DurationKeyDeserializer.java new file mode 100644 index 00000000..cb772d47 --- /dev/null +++ b/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/DurationKeyDeserializer.java @@ -0,0 +1,15 @@ +package com.fasterxml.jackson.datatype.joda.deser.key; + +import com.fasterxml.jackson.databind.DeserializationContext; +import org.joda.time.Duration; + +import java.io.IOException; + +public class DurationKeyDeserializer extends JodaKeyDeserializer { + private static final long serialVersionUID = 1L; + + @Override + protected Duration deserialize(String key, DeserializationContext ctxt) throws IOException { + return Duration.parse(key); + } +} \ No newline at end of file diff --git a/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/PeriodKeyDeserializer.java b/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/PeriodKeyDeserializer.java new file mode 100644 index 00000000..7e7b8f13 --- /dev/null +++ b/src/main/java/com/fasterxml/jackson/datatype/joda/deser/key/PeriodKeyDeserializer.java @@ -0,0 +1,15 @@ +package com.fasterxml.jackson.datatype.joda.deser.key; + +import com.fasterxml.jackson.databind.DeserializationContext; +import org.joda.time.Period; + +import java.io.IOException; + +public class PeriodKeyDeserializer extends JodaKeyDeserializer { + private static final long serialVersionUID = 1L; + + @Override + protected Period deserialize(String key, DeserializationContext ctxt) throws IOException { + return Period.parse(key); + } +} \ No newline at end of file diff --git a/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MiscDeserializationTest.java b/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MiscDeserializationTest.java index 47671f83..8cfd0c61 100644 --- a/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MiscDeserializationTest.java +++ b/src/test/java/com/fasterxml/jackson/datatype/joda/deser/MiscDeserializationTest.java @@ -543,6 +543,20 @@ public void testLocalDateTimeKeyDeserialize() throws IOException { assertNotNull(map); assertTrue(map.containsKey(LocalDateTime.parse("2014-05-23T00:00:00.000"))); } + public void testDurationKeyDeserialize() throws IOException { + + final String json = "{" + quote("PT60s") + ":0}"; + final Map map = MAPPER.readValue(json, new TypeReference>() { }); + assertNotNull(map); + assertTrue(map.containsKey(Duration.standardMinutes(1L))); + } + public void testPeriodKeyDeserialize() throws IOException { + + final String json = "{" + quote("PT1H2M3.004S") + ":0}"; + final Map map = MAPPER.readValue(json, new TypeReference>() { }); + assertNotNull(map); + assertTrue(map.containsKey(new Period(1, 2, 3, 4))); + } public void testDeserMonthDay() throws Exception {