From 749c0f8727c0e7140ca1897bd1030a5bf37b1a30 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 15 Jan 2022 19:22:40 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + .../hutool/core/bean/copier/BeanCopier.java | 1 + .../core/date/TemporalAccessorUtil.java | 21 +++++++-- .../main/java/cn/hutool/json/JSONObject.java | 1 - .../java/cn/hutool/json/Issue2090Test.java | 43 +++++++++++++++++++ .../java/cn/hutool/json/JSONObjectTest.java | 1 + 6 files changed, 64 insertions(+), 4 deletions(-) create mode 100755 hutool-json/src/test/java/cn/hutool/json/Issue2090Test.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 68ca938c2..de4449f8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ * 【core 】 修复OS中的拼写错误(pr#500@Gitee) * 【core 】 修复CustomKeyMap的merge失效问题(issue#2086@Github) * 【core 】 修复FileUtil.appendLines换行问题(issue#I4QCEZ@Gitee) +* 【core 】 修复java.time.Month解析问题(issue#2090@Github) ------------------------------------------------------------------------------------------------------------- # 5.7.19 (2022-01-07) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanCopier.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanCopier.java index 1b9afc7cf..c3f4cb35c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanCopier.java @@ -35,6 +35,7 @@ public class BeanCopier implements Copier, Serializable { private static final long serialVersionUID = 1L; /** 源对象 */ + @SuppressWarnings("NonSerializableFieldInSerializableClass") private final Object source; /** 目标对象 */ private final T dest; diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TemporalAccessorUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/TemporalAccessorUtil.java index 1d9baef32..034f4868b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TemporalAccessorUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TemporalAccessorUtil.java @@ -7,6 +7,7 @@ import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.Month; import java.time.OffsetDateTime; import java.time.OffsetTime; import java.time.ZoneId; @@ -40,7 +41,8 @@ public class TemporalAccessorUtil extends TemporalUtil{ } /** - * 格式化日期时间为指定格式 + * 格式化日期时间为指定格式
+ * 如果为{@link Month},调用{@link Month#toString()} * * @param time {@link TemporalAccessor} * @param formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter} @@ -52,6 +54,10 @@ public class TemporalAccessorUtil extends TemporalUtil{ return null; } + if(time instanceof Month){ + return time.toString(); + } + if(null == formatter){ formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; } @@ -74,7 +80,8 @@ public class TemporalAccessorUtil extends TemporalUtil{ } /** - * 格式化日期时间为指定格式 + * 格式化日期时间为指定格式
+ * 如果为{@link Month},调用{@link Month#toString()} * * @param time {@link TemporalAccessor} * @param format 日期格式 @@ -86,6 +93,10 @@ public class TemporalAccessorUtil extends TemporalUtil{ return null; } + if(time instanceof Month){ + return time.toString(); + } + // 检查自定义格式 if(GlobalCustomFormat.isCustomFormat(format)){ return GlobalCustomFormat.format(time, format); @@ -98,13 +109,17 @@ public class TemporalAccessorUtil extends TemporalUtil{ } /** - * {@link TemporalAccessor}转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数) + * {@link TemporalAccessor}转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)
+ * 如果为{@link Month},调用{@link Month#getValue()} * * @param temporalAccessor Date对象 * @return {@link Instant}对象 * @since 5.4.1 */ public static long toEpochMilli(TemporalAccessor temporalAccessor) { + if(temporalAccessor instanceof Month){ + return ((Month) temporalAccessor).getValue(); + } return toInstant(temporalAccessor).toEpochMilli(); } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java index 403070853..a7582edd4 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java @@ -671,7 +671,6 @@ public class JSONObject implements JSON, JSONGetter, Map // 不支持对象类型转换为JSONObject throw new JSONException("Unsupported type [{}] to JSONObject!", source.getClass()); } - } /** diff --git a/hutool-json/src/test/java/cn/hutool/json/Issue2090Test.java b/hutool-json/src/test/java/cn/hutool/json/Issue2090Test.java new file mode 100755 index 000000000..f1f59b68e --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/Issue2090Test.java @@ -0,0 +1,43 @@ +package cn.hutool.json; + +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +import java.time.LocalDate; +import java.time.Month; + +/** + * https://github.com/dromara/hutool/issues/2090 + */ +public class Issue2090Test { + + @Test + public void parseTest(){ + final TestBean test = new TestBean(); + test.setLocalDate(LocalDate.now()); + + final JSONObject json = JSONUtil.parseObj(test); + final TestBean test1 = json.toBean(TestBean.class); + Assert.assertEquals(test, test1); + } + + @Test + public void parseLocalDateTest(){ + LocalDate localDate = LocalDate.now(); + final JSONObject jsonObject = JSONUtil.parseObj(localDate); + Assert.assertNotNull(jsonObject.toString()); + } + + @Test + public void monthTest(){ + final JSONObject jsonObject = new JSONObject(); + jsonObject.set("month", Month.JANUARY); + Assert.assertEquals("{\"month\":1}", jsonObject.toString()); + } + + @Data + public static class TestBean{ + private LocalDate localDate; + } +} diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java index f3ae62388..3b18c8059 100644 --- a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java @@ -30,6 +30,7 @@ import org.junit.Test; import java.math.BigDecimal; import java.sql.Timestamp; +import java.time.LocalDate; import java.util.Date; import java.util.HashMap; import java.util.List;