Skip to content

Commit 5b7c932

Browse files
authored
Fix #162 Add all serializers for org.joda.time.Hours\Minutes\Seconds\Months\Years\Weeks (#164)
1 parent b7e3d4b commit 5b7c932

File tree

10 files changed

+231
-3
lines changed

10 files changed

+231
-3
lines changed

release-notes/CREDITS-2.x

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,5 @@ Stephane Paulus (StephanePaulus@github)
112112

113113
Joo Hyuk Kim (@JooHyukKim)
114114
* Fixed #160: Cannot serialize `org.joda.time.Days`
115+
* Fixed #162: Cannot serialize `org.joda.time.Hours\Minutes\Seconds\Months\Years\Weeks`
115116
(2.18.4)

release-notes/VERSION-2.x

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ Project: jackson-datatype-joda
99
#160: Cannot serialize `org.joda.time.Days`
1010
(reported by @bestbugwriter)
1111
(fixed by Joo-Hyuk K)
12+
#162: Cannot serialize `org.joda.time.Hours\Minutes\Seconds\Months\Years\Weeks`
13+
(reported by @bestbugwriter)
14+
(fixed by Joo-Hyuk K)
1215

1316
2.18.3 (28-Feb-2025)
1417
2.18.2 (27-Nov-2024)

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,20 @@ public JodaModule()
3939
addSerializer(DateTimeZone.class, new DateTimeZoneSerializer());
4040
addSerializer(Days.class, new DaysSerializer()); // 2.18.4
4141
addSerializer(Duration.class, new DurationSerializer());
42+
addSerializer(Hours.class, new HoursSerializer()); // 2.18.4
4243
addSerializer(Instant.class, new InstantSerializer());
43-
addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
44+
addSerializer(Interval.class, new IntervalSerializer());
4445
addSerializer(LocalDate.class, new LocalDateSerializer());
46+
addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
4547
addSerializer(LocalTime.class, new LocalTimeSerializer());
46-
addSerializer(Period.class, new PeriodSerializer());
47-
addSerializer(Interval.class, new IntervalSerializer());
48+
addSerializer(Minutes.class, new MinutesSerializer()); // 2.18.4
4849
addSerializer(MonthDay.class, new MonthDaySerializer());
50+
addSerializer(Months.class, new MonthsSerializer()); // 2.18.4
51+
addSerializer(Period.class, new PeriodSerializer());
52+
addSerializer(Seconds.class, new SecondsSerializer()); // 2.18.4
53+
addSerializer(Weeks.class, new WeeksSerializer()); // 2.18.4
4954
addSerializer(YearMonth.class, new YearMonthSerializer());
55+
addSerializer(Years.class, new YearsSerializer()); // 2.18.4
5056

5157
// then key deserializers
5258
addKeyDeserializer(DateTime.class, new DateTimeKeyDeserializer());
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Hours;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Hours} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class HoursSerializer
16+
extends JodaSerializerBase<Hours>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public HoursSerializer() {
22+
super(Hours.class);
23+
}
24+
25+
@Override
26+
public void serialize(Hours value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getHours());
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Minutes;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Minutes} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class MinutesSerializer
16+
extends JodaSerializerBase<Minutes>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public MinutesSerializer() {
22+
super(Minutes.class);
23+
}
24+
25+
@Override
26+
public void serialize(Minutes value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getMinutes());
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Months;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Months} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class MonthsSerializer
16+
extends JodaSerializerBase<Months>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public MonthsSerializer() {
22+
super(Months.class);
23+
}
24+
25+
@Override
26+
public void serialize(Months value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getMonths());
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Seconds;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Seconds} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class SecondsSerializer
16+
extends JodaSerializerBase<Seconds>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public SecondsSerializer() {
22+
super(Seconds.class);
23+
}
24+
25+
@Override
26+
public void serialize(Seconds value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getSeconds());
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Weeks;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Weeks} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class WeeksSerializer
16+
extends JodaSerializerBase<Weeks>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public WeeksSerializer() {
22+
super(Weeks.class);
23+
}
24+
25+
@Override
26+
public void serialize(Weeks value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getWeeks());
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.datatype.joda.ser;
2+
3+
import java.io.IOException;
4+
5+
import org.joda.time.Years;
6+
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.SerializerProvider;
9+
10+
/**
11+
* Serializer for Joda {@link Years} class.
12+
*
13+
* @since 2.18.4
14+
*/
15+
public class YearsSerializer
16+
extends JodaSerializerBase<Years>
17+
{
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
public YearsSerializer() {
22+
super(Years.class);
23+
}
24+
25+
@Override
26+
public void serialize(Years value, JsonGenerator gen, SerializerProvider provider) throws IOException {
27+
gen.writeNumber(value.getYears());
28+
}
29+
}

src/test/java/com/fasterxml/jackson/datatype/joda/ser/JodaSerializationTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.joda.time.format.ISODateTimeFormat;
1313

1414
import java.io.IOException;
15+
import java.util.Random;
1516

1617
public class JodaSerializationTest extends JodaTestBase
1718
{
@@ -248,4 +249,47 @@ public void testCustomYearMonthSer() throws Exception
248249
String json = MAPPER.writeValueAsString(new FormattedYearMonth(yearMonth));
249250
assertEquals(a2q("{'value':'2013/08'}"), json);
250251
}
252+
253+
public void testHoursSer() throws Exception
254+
{
255+
Hours hours = Hours.hours(1);
256+
String json = MAPPER.writeValueAsString(hours);
257+
assertEquals("1", json);
258+
}
259+
260+
public void testMinutesSer() throws Exception
261+
{
262+
Minutes minutes = Minutes.minutes(2);
263+
String json = MAPPER.writeValueAsString(minutes);
264+
assertEquals("2", json);
265+
}
266+
267+
public void testSecondsSer() throws Exception
268+
{
269+
Seconds seconds = Seconds.seconds(3);
270+
String json = MAPPER.writeValueAsString(seconds);
271+
assertEquals("3", json);
272+
}
273+
274+
public void testMonthsSer() throws Exception
275+
{
276+
Months months = Months.months(4);
277+
String json = MAPPER.writeValueAsString(months);
278+
assertEquals("4", json);
279+
}
280+
281+
public void testYearsSer() throws Exception
282+
{
283+
Years years = Years.years(5);
284+
String json = MAPPER.writeValueAsString(years);
285+
assertEquals("5", json);
286+
}
287+
288+
public void testWeeksSer() throws Exception
289+
{
290+
Weeks weeks = Weeks.weeks(6);
291+
String json = MAPPER.writeValueAsString(weeks);
292+
assertEquals("6", json);
293+
}
294+
251295
}

0 commit comments

Comments
 (0)