diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a879a5d5..d10bd7ee3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ * 【core 】 修复FilterIter当参数filter为空时存在问题(issue#I5OG7U@Gitee) * 【poi 】 修复Excel读取提示信息错误(issue#I5OSFC@Gitee) * 【json 】 解决JSONObject#write无法递归的bug(issue#I5OMSC@Gitee) +* 【json 】 修复DayOfWeek转json异常问题(issue#2572@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java index bbc1fd347..40f62a131 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java @@ -52,11 +52,14 @@ import java.net.URI; import java.net.URL; import java.nio.charset.Charset; import java.nio.file.Path; +import java.time.DayOfWeek; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.Month; +import java.time.MonthDay; import java.time.OffsetDateTime; import java.time.OffsetTime; import java.time.Period; @@ -427,6 +430,9 @@ public class ConverterRegistry implements Serializable { defaultConverterMap.put(ZonedDateTime.class, new TemporalAccessorConverter(ZonedDateTime.class)); defaultConverterMap.put(OffsetDateTime.class, new TemporalAccessorConverter(OffsetDateTime.class)); defaultConverterMap.put(OffsetTime.class, new TemporalAccessorConverter(OffsetTime.class)); + defaultConverterMap.put(DayOfWeek.class, new TemporalAccessorConverter(DayOfWeek.class)); + defaultConverterMap.put(Month.class, new TemporalAccessorConverter(Month.class)); + defaultConverterMap.put(MonthDay.class, new TemporalAccessorConverter(MonthDay.class)); defaultConverterMap.put(Period.class, new PeriodConverter()); defaultConverterMap.put(Duration.class, new DurationConverter()); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java index 53f36ba59..b9883b7be 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java @@ -6,14 +6,19 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import java.time.DayOfWeek; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.Month; +import java.time.MonthDay; import java.time.OffsetDateTime; import java.time.OffsetTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.time.chrono.Era; +import java.time.chrono.IsoEra; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; import java.util.Calendar; @@ -120,6 +125,16 @@ public class TemporalAccessorConverter extends AbstractConverter weeks = new HashSet<>(); + weeks.add(DayOfWeek.MONDAY); + final JSONObject obj = new JSONObject(); + obj.set("weeks", weeks); + Assert.assertEquals("{\"weeks\":[\"MONDAY\"]}", obj.toString()); + + final Map> monthDays1 = obj.toBean(new TypeReference>>() { + }); + Assert.assertEquals("{weeks=[MONDAY]}", monthDays1.toString()); + } + + @Test + public void putMonthTest(){ + final Set months = new HashSet<>(); + months.add(Month.DECEMBER); + final JSONObject obj = new JSONObject(); + obj.set("months", months); + Assert.assertEquals("{\"months\":[\"DECEMBER\"]}", obj.toString()); + + final Map> monthDays1 = obj.toBean(new TypeReference>>() { + }); + Assert.assertEquals("{months=[DECEMBER]}", monthDays1.toString()); + } + + @Test + public void putMonthDayTest(){ + final Set monthDays = new HashSet<>(); + monthDays.add(MonthDay.of(Month.DECEMBER, 1)); + final JSONObject obj = new JSONObject(); + obj.set("monthDays", monthDays); + Assert.assertEquals("{\"monthDays\":[\"--12-01\"]}", obj.toString()); + + final Map> monthDays1 = obj.toBean(new TypeReference>>() { + }); + Assert.assertEquals("{monthDays=[--12-01]}", monthDays1.toString()); + } +}