diff --git a/CHANGELOG.md b/CHANGELOG.md index 443f42ddd..d948c93d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.7 (2021-07-27) - -### 🐣新特性 -### 🐞Bug修复 - -------------------------------------------------------------------------------------------------------------- - -# 5.7.6 (2021-07-26) +# 5.7.6 (2021-07-28) ### 🐣新特性 * 【core 】 增加FieldsComparator(pr#374@Gitee) @@ -30,7 +23,9 @@ * 【core 】 修复FileTypeUtil判断wps修改过的xlsx误判为jar的问题(pr#380@Gitee) * 【core 】 修复Sftp.isDir异常bug(pr#378@Gitee) * 【core 】 修复BeanUtil.copyProperties集合元素复制成功,读取失败的问题(issue#I41WKP@Gitee) -* 【core 】 修复NumberChineseFormatter.chineseToNumber十位数错误(issue#1726@Gitee) +* 【core 】 修复NumberChineseFormatter.chineseToNumber十位数错误(issue#1726@github) +* 【poi 】 修复BeanSheetReader.read中字段对象为空导致的报错(issue#1729@Github) +* 【core 】 修复DateConverter转换java.sql.Date问题(issue#1729@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/MapValueProvider.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/MapValueProvider.java index 7c84e4074..e054c29e2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/MapValueProvider.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/MapValueProvider.java @@ -62,8 +62,7 @@ public class MapValueProvider implements ValueProvider { return null; } - final Object value = map.get(key1); - return Convert.convertWithCheck(valueType, value, null, this.ignoreError); + return Convert.convertWithCheck(valueType, map.get(key1), null, this.ignoreError); } @Override diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java index a936c6e76..f659f42bd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java @@ -1,13 +1,13 @@ package cn.hutool.core.convert.impl; import cn.hutool.core.convert.AbstractConverter; +import cn.hutool.core.convert.ConvertException; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import java.time.temporal.TemporalAccessor; import java.util.Calendar; -import java.util.Date; /** * 日期转换器 @@ -71,7 +71,7 @@ public class DateConverter extends AbstractConverter { } else { // 统一按照字符串处理 final String valueStr = convertToStr(value); - final Date date = StrUtil.isBlank(this.format) // + final java.util.Date date = StrUtil.isBlank(this.format) // ? DateUtil.parse(valueStr) // : DateUtil.parse(valueStr, this.format); if(null != date){ @@ -79,7 +79,7 @@ public class DateConverter extends AbstractConverter { } } - throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName())); + throw new ConvertException("Can not convert {}:[{}] to {}", value.getClass().getName(), value, this.targetType.getName()); } /** @@ -105,7 +105,7 @@ public class DateConverter extends AbstractConverter { return new java.sql.Timestamp(date.getTime()); } - throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName())); + throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", this.targetType.getName())); } /** @@ -116,7 +116,7 @@ public class DateConverter extends AbstractConverter { private java.util.Date wrap(long mills){ // 返回指定类型 if (java.util.Date.class == targetType) { - return new Date(mills); + return new java.util.Date(mills); } if (DateTime.class == targetType) { return DateUtil.date(mills); @@ -131,6 +131,12 @@ public class DateConverter extends AbstractConverter { return new java.sql.Timestamp(mills); } - throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName())); + throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", this.targetType.getName())); + } + + @SuppressWarnings("unchecked") + @Override + public Class getTargetType() { + return (Class) this.targetType; } } diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java index 022e0ef68..25315c843 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertTest.java @@ -2,6 +2,7 @@ package cn.hutool.core.convert; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateException; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.TypeReference; import cn.hutool.core.util.ByteUtil; import lombok.AllArgsConstructor; @@ -310,4 +311,10 @@ public class ConvertTest { final Date date = Convert.toDate("2021-01"); Assert.assertNull(date); } + + @Test + public void toSqlDateTest(){ + final java.sql.Date date = Convert.convert(java.sql.Date.class, DateUtil.parse("2021-07-28")); + Assert.assertEquals("2021-07-28", date.toString()); + } } diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/BeanSheetReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/BeanSheetReader.java index 21b0cf9e8..e2801abc1 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/BeanSheetReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/BeanSheetReader.java @@ -42,7 +42,7 @@ public class BeanSheetReader implements SheetReader> { final List beanList = new ArrayList<>(mapList.size()); for (Map map : mapList) { - beanList.add(BeanUtil.toBean(map, this.beanClass)); + beanList.add(BeanUtil.toBeanIgnoreError(map, this.beanClass)); } return beanList; } diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue1729Test.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue1729Test.java new file mode 100644 index 000000000..e693237ab --- /dev/null +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue1729Test.java @@ -0,0 +1,30 @@ +package cn.hutool.poi.excel; + +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +/** + * issue#1729@Github
+ * 日期为空时返回""而非null,因此会导致日期等字段的转换错误,此处转bean时忽略错误。 + */ +public class Issue1729Test { + + @Test + public void readTest() { + final ExcelReader reader = ExcelUtil.getReader("UserProjectDO.xlsx"); + final List read = reader.read(0, 1, UserProjectDO.class); + Assert.assertEquals("aa", read.get(0).getProjectName()); + Assert.assertNull(read.get(0).getEndTrainTime()); + Assert.assertEquals("2020-02-02", read.get(0).getEndTestTime().toString()); + } + + @Data + public static class UserProjectDO { + private String projectName; + private java.sql.Date endTrainTime; + private java.sql.Date endTestTime; + } +} diff --git a/hutool-poi/src/test/resources/UserProjectDO.xlsx b/hutool-poi/src/test/resources/UserProjectDO.xlsx new file mode 100644 index 000000000..9069b8376 Binary files /dev/null and b/hutool-poi/src/test/resources/UserProjectDO.xlsx differ