From 6fa82a33782a9a714ec3ed845f03b64695e04b9d Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 22 Mar 2021 09:41:31 +0800 Subject: [PATCH 01/17] add carLicence --- .../java/cn/hutool/core/util/DesensitizedUtil.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java index 9035aaebd..cc0564b7f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java @@ -57,11 +57,12 @@ public class DesensitizedUtil { * DesensitizedUtil.desensitized("duandazhi-jack@gmail.com.cn", DesensitizedUtils.DesensitizedType.EMAIL)) = "d*************@gmail.com.cn" * DesensitizedUtil.desensitized("1234567890", DesensitizedUtils.DesensitizedType.PASSWORD)) = "**********" * DesensitizedUtil.desensitized("苏D40000", DesensitizedUtils.DesensitizedType.CAR_LICENSE)) = "苏D4***0" + * * - * @author dazer and neusoft and qiaomu - * @param str 字符串 + * @param str 字符串 * @param desensitizedType 脱敏类型;可以脱敏:用户id、中文名、身份证号、座机号、手机号、地址、电子邮件、密码 * @return 脱敏之后的字符串 + * @author dazer and neusoft and qiaomu * @since 5.6.2 */ public static String desensitized(CharSequence str, DesensitizedUtil.DesensitizedType desensitizedType) { @@ -77,7 +78,7 @@ public class DesensitizedUtil { newStr = DesensitizedUtil.chineseName(String.valueOf(str)); break; case ID_CARD: - newStr = DesensitizedUtil.idCardNum(String.valueOf(str),1,2); + newStr = DesensitizedUtil.idCardNum(String.valueOf(str), 1, 2); break; case FIXED_PHONE: newStr = DesensitizedUtil.fixedPhone(String.valueOf(str)); @@ -159,7 +160,7 @@ public class DesensitizedUtil { if (StrUtil.isBlank(num)) { return StrUtil.EMPTY; } - return StrUtil.hide(num, 4, num.length()-2); + return StrUtil.hide(num, 4, num.length() - 2); } /** @@ -172,7 +173,7 @@ public class DesensitizedUtil { if (StrUtil.isBlank(num)) { return StrUtil.EMPTY; } - return StrUtil.hide(num, 3, num.length()-4); + return StrUtil.hide(num, 3, num.length() - 4); } /** @@ -187,7 +188,7 @@ public class DesensitizedUtil { return StrUtil.EMPTY; } int length = address.length(); - return StrUtil.hide(address, length-sensitiveSize, length); + return StrUtil.hide(address, length - sensitiveSize, length); } /** From 25a41fd7608f8514ff0f0e715f0a21a66e73febd Mon Sep 17 00:00:00 2001 From: weisz Date: Mon, 22 Mar 2021 11:41:00 +0800 Subject: [PATCH 02/17] =?UTF-8?q?ofd=20=E6=A0=BC=E5=BC=8F=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=89=A9=E5=B1=95=E5=90=8D=E8=BE=85=E5=8A=A9=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/io/FileTypeUtil.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java index b5250bb07..07809fef0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java @@ -60,7 +60,6 @@ public class FileTypeUtil { FILE_TYPE_MAP.put("4d546864000000060001", "mid"); // MIDI (mid) FILE_TYPE_MAP.put("526172211a0700cf9073", "rar"); // WinRAR FILE_TYPE_MAP.put("235468697320636f6e66", "ini"); - FILE_TYPE_MAP.put("504B0304140000000800", "ofd"); // ofd文件 国标版式文件 FILE_TYPE_MAP.put("504B03040a0000000000", "jar"); FILE_TYPE_MAP.put("504B0304140008000800", "jar"); // MS Excel 注意:word、msi 和 excel的文件头一样 @@ -140,7 +139,7 @@ public class FileTypeUtil { *
 	 *     1、无法识别类型默认按照扩展名识别
 	 *     2、xls、doc、msi头信息无法区分,按照扩展名区分
-	 *     3、zip可能为docx、xlsx、pptx、jar、war头信息无法区分,按照扩展名区分
+	 *     3、zip可能为docx、xlsx、pptx、jar、war、ofd头信息无法区分,按照扩展名区分
 	 * 
* @param in {@link InputStream} * @param filename 文件名 @@ -162,7 +161,7 @@ public class FileTypeUtil { typeName = "msi"; } } else if ("zip".equals(typeName)) { - // zip可能为docx、xlsx、pptx、jar、war等格式,扩展名辅助判断 + // zip可能为docx、xlsx、pptx、jar、war、ofd等格式,扩展名辅助判断 final String extName = FileUtil.extName(filename); if ("docx".equalsIgnoreCase(extName)) { typeName = "docx"; @@ -174,6 +173,8 @@ public class FileTypeUtil { typeName = "jar"; } else if ("war".equalsIgnoreCase(extName)) { typeName = "war"; + } else if ("ofd".equalsIgnoreCase(extName)) { + typeName = "ofd"; } } return typeName; From 7c70aba4f2f64c93723c78143ad7db52723ffba4 Mon Sep 17 00:00:00 2001 From: guiye Date: Wed, 24 Mar 2021 16:19:05 +0800 Subject: [PATCH 03/17] =?UTF-8?q?fix:=20LinKedMap=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/map/CamelCaseLinkedMap.java | 28 +++++++++++++++---- .../core/map/CaseInsensitiveLinkedMap.java | 26 +++++++++++++---- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseLinkedMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseLinkedMap.java index 6568098f6..fbd2b776c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseLinkedMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseLinkedMap.java @@ -1,19 +1,21 @@ package cn.hutool.core.map; +import cn.hutool.core.util.StrUtil; + import java.util.LinkedHashMap; import java.util.Map; /** * 驼峰Key风格的LinkedHashMap
* 对KEY转换为驼峰,get("int_value")和get("intValue")获得的值相同,put进入的值也会被覆盖 - * + * * @author Looly * * @param 键类型 * @param 值类型 * @since 4.0.7 */ -public class CamelCaseLinkedMap extends CamelCaseMap { +public class CamelCaseLinkedMap extends CustomKeyMap { private static final long serialVersionUID = 4043263744224569870L; // ------------------------------------------------------------------------- Constructor start @@ -26,7 +28,7 @@ public class CamelCaseLinkedMap extends CamelCaseMap { /** * 构造 - * + * * @param initialCapacity 初始大小 */ public CamelCaseLinkedMap(int initialCapacity) { @@ -35,7 +37,7 @@ public class CamelCaseLinkedMap extends CamelCaseMap { /** * 构造 - * + * * @param m Map */ public CamelCaseLinkedMap(Map m) { @@ -44,7 +46,7 @@ public class CamelCaseLinkedMap extends CamelCaseMap { /** * 构造 - * + * * @param loadFactor 加载因子 * @param m Map */ @@ -55,7 +57,7 @@ public class CamelCaseLinkedMap extends CamelCaseMap { /** * 构造 - * + * * @param initialCapacity 初始大小 * @param loadFactor 加载因子 */ @@ -63,4 +65,18 @@ public class CamelCaseLinkedMap extends CamelCaseMap { super(new LinkedHashMap<>(initialCapacity, loadFactor)); } // ------------------------------------------------------------------------- Constructor end + + /** + * 将Key转为驼峰风格,如果key为字符串的话 + * + * @param key KEY + * @return 驼峰Key + */ + @Override + protected Object customKey(Object key) { + if (key instanceof CharSequence) { + key = StrUtil.toCamelCase(key.toString()); + } + return key; + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveLinkedMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveLinkedMap.java index a0a0ff628..51cdd2561 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveLinkedMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveLinkedMap.java @@ -6,14 +6,14 @@ import java.util.Map; /** * 忽略大小写的LinkedHashMap
* 对KEY忽略大小写,get("Value")和get("value")获得的值相同,put进入的值也会被覆盖 - * + * * @author Looly * * @param 键类型 * @param 值类型 * @since 3.3.1 */ -public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { +public class CaseInsensitiveLinkedMap extends CustomKeyMap { private static final long serialVersionUID = 4043263744224569870L; // ------------------------------------------------------------------------- Constructor start @@ -26,7 +26,7 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { /** * 构造 - * + * * @param initialCapacity 初始大小 */ public CaseInsensitiveLinkedMap(int initialCapacity) { @@ -35,7 +35,7 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { /** * 构造 - * + * * @param m Map */ public CaseInsensitiveLinkedMap(Map m) { @@ -44,7 +44,7 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { /** * 构造 - * + * * @param loadFactor 加载因子 * @param m Map * @since 3.1.2 @@ -56,7 +56,7 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { /** * 构造 - * + * * @param initialCapacity 初始大小 * @param loadFactor 加载因子 */ @@ -64,4 +64,18 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { super(new LinkedHashMap<>(initialCapacity, loadFactor)); } // ------------------------------------------------------------------------- Constructor end + + /** + * 将Key转为小写 + * + * @param key KEY + * @return 小写KEY + */ + @Override + protected Object customKey(Object key) { + if (key instanceof CharSequence) { + key = key.toString().toLowerCase(); + } + return key; + } } From fd4b185929e743f1bbba23107e9afb748ef81246 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 25 Mar 2021 09:56:49 +0800 Subject: [PATCH 04/17] add constructor --- CHANGELOG.md | 5 ++- .../java/cn/hutool/core/date/DateTime.java | 36 +++++++++++++++++-- .../hutool/core/collection/CollUtilTest.java | 1 + .../cn/hutool/core/date/DateTimeTest.java | 25 +++++++++++-- 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73018e528..6421908cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,17 @@ ------------------------------------------------------------------------------------------------------------- -# 5.6.2 (2021-03-21) +# 5.6.2 (2021-03-24) ### 新特性 * 【core 】 Validator增加车架号(车辆识别码)验证、驾驶证(驾驶证档案编号)的正则校验(pr#280@Gitee) * 【core 】 CopyOptions增加propertiesFilter(pr#281@Gitee) * 【extra 】 增加Wit模板引擎支持 * 【core 】 增加DesensitizedUtil(pr#282@Gitee) +* 【core 】 增加DateTime字符串构造(issue#I3CQZG@Gitee) + ### Bug修复 +* 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java index 2c189d103..17f63cc51 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java @@ -122,7 +122,7 @@ public class DateTime extends Date { */ public DateTime(Date date) { this( - date.getTime(),// + date,// (date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault() ); } @@ -135,7 +135,7 @@ public class DateTime extends Date { * @since 4.1.2 */ public DateTime(Date date, TimeZone timeZone) { - this(date.getTime(), timeZone); + this(ObjectUtil.defaultIfNull(date, new Date()).getTime(), timeZone); } /** @@ -211,6 +211,38 @@ public class DateTime extends Date { this.timeZone = ObjectUtil.defaultIfNull(timeZone, TimeZone.getDefault()); } + /** + * 构造格式:
+ *
    + *
  1. yyyy-MM-dd HH:mm:ss
  2. + *
  3. yyyy/MM/dd HH:mm:ss
  4. + *
  5. yyyy.MM.dd HH:mm:ss
  6. + *
  7. yyyy年MM月dd日 HH时mm分ss秒
  8. + *
  9. yyyy-MM-dd
  10. + *
  11. yyyy/MM/dd
  12. + *
  13. yyyy.MM.dd
  14. + *
  15. HH:mm:ss
  16. + *
  17. HH时mm分ss秒
  18. + *
  19. yyyy-MM-dd HH:mm
  20. + *
  21. yyyy-MM-dd HH:mm:ss.SSS
  22. + *
  23. yyyyMMddHHmmss
  24. + *
  25. yyyyMMddHHmmssSSS
  26. + *
  27. yyyyMMdd
  28. + *
  29. EEE, dd MMM yyyy HH:mm:ss z
  30. + *
  31. EEE MMM dd HH:mm:ss zzz yyyy
  32. + *
  33. yyyy-MM-dd'T'HH:mm:ss'Z'
  34. + *
  35. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
  36. + *
  37. yyyy-MM-dd'T'HH:mm:ssZ
  38. + *
  39. yyyy-MM-dd'T'HH:mm:ss.SSSZ
  40. + *
+ * + * @param dateStr Date字符串 + * @since 5.6.2 + */ + public DateTime(CharSequence dateStr) { + this(DateUtil.parse(dateStr)); + } + /** * 构造 * diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index 076dd64fb..9584ec75a 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -1,6 +1,7 @@ package cn.hutool.core.collection; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Editor; import cn.hutool.core.lang.Filter; diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateTimeTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateTimeTest.java index e8de2f82d..d35053b52 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateTimeTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateTimeTest.java @@ -5,7 +5,7 @@ import org.junit.Test; /** * DateTime单元测试 - * + * * @author Looly * */ @@ -32,6 +32,27 @@ public class DateTimeTest { Assert.assertEquals(5, day); } + @Test + public void datetimeTest2() { + DateTime dateTime = new DateTime("2017-01-05 12:34:23"); + + // 年 + int year = dateTime.year(); + Assert.assertEquals(2017, year); + + // 季度(非季节) + Quarter season = dateTime.quarterEnum(); + Assert.assertEquals(Quarter.Q1, season); + + // 月份 + Month month = dateTime.monthEnum(); + Assert.assertEquals(Month.JANUARY, month); + + // 日 + int day = dateTime.dayOfMonth(); + Assert.assertEquals(5, day); + } + @Test public void quarterTest() { DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT); @@ -90,7 +111,7 @@ public class DateTimeTest { int month = DateUtil.parse("2017-07-01").month(); Assert.assertEquals(6, month); } - + @Test public void weekOfYearTest() { DateTime date = DateUtil.parse("2016-12-27"); From e503824e9cee4152abf15f43f3937ac082af8cad Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 25 Mar 2021 10:09:44 +0800 Subject: [PATCH 05/17] fix bug --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6421908cb..fcc2b2d94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.6.2 (2021-03-24) +# 5.6.2 (2021-03-25) ### 新特性 * 【core 】 Validator增加车架号(车辆识别码)验证、驾驶证(驾驶证档案编号)的正则校验(pr#280@Gitee) @@ -14,6 +14,7 @@ ### Bug修复 * 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) +* 【core 】 修复CamelCaseLinkedMap和CaseInsensitiveLinkedMap的Linked失效问题(pr#1490@Github) ------------------------------------------------------------------------------------------------------------- From 70ac62660d190ad27ddb440904f8c98bd43bb004 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 25 Mar 2021 15:53:10 +0800 Subject: [PATCH 06/17] change style for ArrayUtil --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/ArrayUtil.java | 78 +++++++++---------- .../cn/hutool/core/util/ArrayUtilTest.java | 44 ++++++++++- 3 files changed, 82 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fcc2b2d94..31e958488 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * 【extra 】 增加Wit模板引擎支持 * 【core 】 增加DesensitizedUtil(pr#282@Gitee) * 【core 】 增加DateTime字符串构造(issue#I3CQZG@Gitee) +* 【core 】 修改ArrayUtil代码风格(pr#287@Gitee) ### Bug修复 * 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index ea32bca85..530f28a05 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -89,7 +89,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @return 是否为非空 */ public static boolean isNotEmpty(T[] array) { - return (array != null && array.length != 0); + return (null != array && array.length != 0); } /** @@ -653,7 +653,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @since 3.2.2 */ public static T[] removeEmpty(T[] array) { - return filter(array, (Filter) t -> false == StrUtil.isEmpty(t)); + return filter(array, StrUtil::isNotEmpty); } /** @@ -665,7 +665,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @since 3.2.2 */ public static T[] removeBlank(T[] array) { - return filter(array, (Filter) t -> false == StrUtil.isBlank(t)); + return filter(array, StrUtil::isNotBlank); } /** @@ -900,11 +900,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @return 是否为数组对象,如果为{@code null} 返回false */ public static boolean isArray(Object obj) { - if (null == obj) { - // throw new NullPointerException("Object check for isArray is null"); - return false; - } - return obj.getClass().isArray(); + return null != obj && obj.getClass().isArray(); } /** @@ -1227,35 +1223,39 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @return 连接后的字符串 */ public static String join(Object array, CharSequence conjunction) { - if (isArray(array)) { - final Class componentType = array.getClass().getComponentType(); - if (componentType.isPrimitive()) { - final String componentTypeName = componentType.getName(); - switch (componentTypeName) { - case "long": - return join((long[]) array, conjunction); - case "int": - return join((int[]) array, conjunction); - case "short": - return join((short[]) array, conjunction); - case "char": - return join((char[]) array, conjunction); - case "byte": - return join((byte[]) array, conjunction); - case "boolean": - return join((boolean[]) array, conjunction); - case "float": - return join((float[]) array, conjunction); - case "double": - return join((double[]) array, conjunction); - default: - throw new UtilException("Unknown primitive type: [{}]", componentTypeName); - } - } else { - return join((Object[]) array, conjunction); - } + if(null == array){ + throw new NullPointerException("Array must be not null!"); + } + if (false == isArray(array)) { + throw new IllegalArgumentException(StrUtil.format("[{}] is not a Array!", array.getClass())); + } + + final Class componentType = array.getClass().getComponentType(); + if (componentType.isPrimitive()) { + final String componentTypeName = componentType.getName(); + switch (componentTypeName) { + case "long": + return join((long[]) array, conjunction); + case "int": + return join((int[]) array, conjunction); + case "short": + return join((short[]) array, conjunction); + case "char": + return join((char[]) array, conjunction); + case "byte": + return join((byte[]) array, conjunction); + case "boolean": + return join((boolean[]) array, conjunction); + case "float": + return join((float[]) array, conjunction); + case "double": + return join((double[]) array, conjunction); + default: + throw new UtilException("Unknown primitive type: [{}]", componentTypeName); + } + } else { + return join((Object[]) array, conjunction); } - throw new UtilException(StrUtil.format("[{}] is not a Array!", array.getClass())); } /** @@ -1266,7 +1266,9 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @since 3.0.1 */ public static byte[] toArray(ByteBuffer bytebuffer) { - if (false == bytebuffer.hasArray()) { + if (bytebuffer.hasArray()) { + return Arrays.copyOfRange(bytebuffer.array(), bytebuffer.position(), bytebuffer.limit()); + } else { int oldPosition = bytebuffer.position(); bytebuffer.position(0); int size = bytebuffer.limit(); @@ -1274,8 +1276,6 @@ public class ArrayUtil extends PrimitiveArrayUtil { bytebuffer.get(buffers); bytebuffer.position(oldPosition); return buffers; - } else { - return Arrays.copyOfRange(bytebuffer.array(), bytebuffer.position(), bytebuffer.limit()); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java index 089be5691..ac3f6c719 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -53,6 +53,12 @@ public class ArrayUtilTest { public void isNotEmptyTest() { int[] a = {1, 2}; Assert.assertTrue(ArrayUtil.isNotEmpty(a)); + + String[] b = {"a", "b", "c"}; + Assert.assertTrue(ArrayUtil.isNotEmpty(b)); + + Object c = new Object[]{"1", "2", 3, 4D}; + Assert.assertTrue(ArrayUtil.isNotEmpty(c)); } @Test @@ -253,15 +259,19 @@ public class ArrayUtilTest { String[] array = {"aa", "bb", "cc", "dd"}; String join = ArrayUtil.join(array, ",", "[", "]"); Assert.assertEquals("[aa],[bb],[cc],[dd]", join); + + Object array2 = new String[]{"aa", "bb", "cc", "dd"}; + String join2 = ArrayUtil.join(array2, ","); + Assert.assertEquals("aa,bb,cc,dd", join2); } @Test public void getArrayTypeTest() { Class arrayType = ArrayUtil.getArrayType(int.class); - Assert.assertEquals(int[].class, arrayType); + Assert.assertSame(int[].class, arrayType); arrayType = ArrayUtil.getArrayType(String.class); - Assert.assertEquals(String[].class, arrayType); + Assert.assertSame(String[].class, arrayType); } @Test @@ -384,4 +394,34 @@ public class ArrayUtilTest { final int[] reverse = ArrayUtil.reverse(a); Assert.assertArrayEquals(new int[]{4,3,2,1}, reverse); } + + @Test + public void removeEmptyTest() { + String[] a = {"a", "b", "", null, " ", "c"}; + String[] resultA = {"a", "b", " ", "c"}; + Assert.assertArrayEquals(ArrayUtil.removeEmpty(a), resultA); + } + + @Test + public void removeBlankTest() { + String[] a = {"a", "b", "", null, " ", "c"}; + String[] resultA = {"a", "b", "c"}; + Assert.assertArrayEquals(ArrayUtil.removeBlank(a), resultA); + } + + @Test + public void nullToEmptyTest() { + String[] a = {"a", "b", "", null, " ", "c"}; + String[] resultA = {"a", "b", "", "", " ", "c"}; + Assert.assertArrayEquals(ArrayUtil.nullToEmpty(a), resultA); + } + + @Test + public void wrapTest() { + Object a = new int[]{1, 2, 3, 4}; + Object[] wrapA = ArrayUtil.wrap(a); + for (Object o : wrapA) { + Assert.assertTrue(o instanceof Integer); + } + } } From fc4a644e35d37b71a5aa7ef6828e9e35b137e5fe Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 25 Mar 2021 17:14:54 +0800 Subject: [PATCH 07/17] fix comment --- .../main/java/cn/hutool/extra/qrcode/QrCodeUtil.java | 8 ++++---- .../java/cn/hutool/extra/qrcode/QrCodeUtilTest.java | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java index ed9478c07..ac77808ca 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java @@ -320,7 +320,7 @@ public class QrCodeUtil { // ------------------------------------------------------------------------------------------------------------------- decode /** - * 解码二维码图片为文本 + * 解码二维码或条形码图片为文本 * * @param qrCodeInputstream 二维码输入流 * @return 解码文本 @@ -330,7 +330,7 @@ public class QrCodeUtil { } /** - * 解码二维码图片为文本 + * 解码二维码或条形码图片为文本 * * @param qrCodeFile 二维码文件 * @return 解码文本 @@ -340,7 +340,7 @@ public class QrCodeUtil { } /** - * 将二维码图片解码为文本 + * 将二维码或条形码图片解码为文本 * * @param image {@link Image} 二维码图片 * @return 解码后的文本 @@ -350,7 +350,7 @@ public class QrCodeUtil { } /** - * 将二维码图片解码为文本 + * 将二维码或条形码图片解码为文本 * * @param image {@link Image} 二维码图片 * @param isTryHarder 是否优化精度 diff --git a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java index f44367993..c1af336f5 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java @@ -14,7 +14,7 @@ import java.io.File; /** * 二维码工具类单元测试 - * + * * @author looly * */ @@ -54,6 +54,14 @@ public class QrCodeUtilTest { Console.log(decode); } + @Test + @Ignore + public void decodeTest2() { + // 条形码 + String decode = QrCodeUtil.decode(FileUtil.file("d:/test/90.png")); + Console.log(decode); + } + @Test @Ignore public void generateAsBase64Test(){ From 8b3155c5562c7101b83d6ef29cfe5e1c725309bb Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 26 Mar 2021 20:36:26 +0800 Subject: [PATCH 08/17] add config --- CHANGELOG.md | 3 ++- .../java/cn/hutool/json/InternalJSONUtil.java | 4 +++- .../main/java/cn/hutool/json/JSONConfig.java | 24 +++++++++++++++++++ .../java/cn/hutool/json/JSONUtilTest.java | 17 +++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31e958488..cb628af91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.6.2 (2021-03-25) +# 5.6.2 (2021-03-26) ### 新特性 * 【core 】 Validator增加车架号(车辆识别码)验证、驾驶证(驾驶证档案编号)的正则校验(pr#280@Gitee) @@ -12,6 +12,7 @@ * 【core 】 增加DesensitizedUtil(pr#282@Gitee) * 【core 】 增加DateTime字符串构造(issue#I3CQZG@Gitee) * 【core 】 修改ArrayUtil代码风格(pr#287@Gitee) +* 【json 】 JSONConfig增加setStripTrailingZeros配置(issue#I3DJI8@Gitee) ### Bug修复 * 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) diff --git a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java index 99c876fce..8c7fa4818 100644 --- a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java @@ -50,7 +50,9 @@ final class InternalJSONUtil { } else if (value instanceof Iterable || value instanceof Iterator || value.getClass().isArray()) { new JSONArray(value).write(writer, indentFactor, indent); } else if (value instanceof Number) { - writer.write(NumberUtil.toStr((Number) value)); + // since 5.6.2可配置是否去除末尾多余0,例如如果为true,5.0返回5 + final boolean isStripTrailingZeros = null == config || config.isStripTrailingZeros(); + writer.write(NumberUtil.toStr((Number) value, isStripTrailingZeros)); } else if (value instanceof Date || value instanceof Calendar || value instanceof TemporalAccessor) { final String format = (null == config) ? null : config.getDateFormat(); writer.write(formatDate(value, format)); diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java index 539e64db8..85b62b39e 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java @@ -36,6 +36,11 @@ public class JSONConfig implements Serializable { */ private boolean transientSupport = true; + /** + * 是否去除末尾多余0,例如如果为true,5.0返回5 + */ + private boolean stripTrailingZeros = true; + /** * 创建默认的配置项 * @@ -192,4 +197,23 @@ public class JSONConfig implements Serializable { this.transientSupport = transientSupport; return this; } + + /** + * 是否去除末尾多余0,例如如果为true,5.0返回5 + * @return 是否去除末尾多余0,例如如果为true,5.0返回5 + * @since 5.6.2 + */ + public boolean isStripTrailingZeros() { + return stripTrailingZeros; + } + + /** + * 设置是否去除末尾多余0,例如如果为true,5.0返回5 + * @param stripTrailingZeros 是否去除末尾多余0,例如如果为true,5.0返回5 + * @since 5.6.2 + */ + public JSONConfig setStripTrailingZeros(boolean stripTrailingZeros) { + this.stripTrailingZeros = stripTrailingZeros; + return this; + } } diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java index fd7ee34e7..dd8abed24 100644 --- a/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java @@ -173,6 +173,23 @@ public class JSONUtilTest { Assert.assertEquals("{\"test2\":12.0}", jsonObject.toString()); } + @Test + public void setStripTrailingZerosTest() { + // 默认去除多余的0 + final JSONObject jsonObjectDefault = JSONUtil.createObj() + .set("test2", 12.00D); + Assert.assertEquals("{\"test2\":12}", jsonObjectDefault.toString()); + + // 不去除多余的0 + final JSONObject jsonObject = JSONUtil.createObj(JSONConfig.create().setStripTrailingZeros(false)) + .set("test2", 12.00D); + Assert.assertEquals("{\"test2\":12.0}", jsonObject.toString()); + + // 去除多余的0 + jsonObject.getConfig().setStripTrailingZeros(true); + Assert.assertEquals("{\"test2\":12}", jsonObject.toString()); + } + @Test public void parseObjTest() { // 测试转义 From 2484c8258481e0d9bea1b3c6eb13f0950e048aa6 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 26 Mar 2021 21:50:21 +0800 Subject: [PATCH 09/17] add methods --- .../hutool/core/text/SpecialSymbolUtil.java | 100 -------------- .../java/cn/hutool/core/text/UnicodeUtil.java | 24 ++++ .../java/cn/hutool/core/util/CharUtil.java | 43 ++++++ .../java/cn/hutool/core/util/HexUtil.java | 4 +- .../cn/hutool/core/util/CharUtilTest.java | 20 ++- .../java/cn/hutool/core/util/HexUtilTest.java | 12 +- .../cn/hutool/extra/servlet/ServletUtil.java | 125 +++++++++--------- .../hutool/extra/servlet/ServletUtilTest.java | 7 +- 8 files changed, 163 insertions(+), 172 deletions(-) delete mode 100644 hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java diff --git a/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java deleted file mode 100644 index 968b62ffa..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/text/SpecialSymbolUtil.java +++ /dev/null @@ -1,100 +0,0 @@ -package cn.hutool.core.text; - -import java.math.BigInteger; - -/** - * 符号工具类 - * @author dazer & neusoft - * @date 2021/3/26 12:21 - * 别名:Symbol or special signal or Special symbols - * 说明:获取常见的特殊符号,如:带圈数字、 - * - * {@link UnicodeUtil} - * @link 百度百科 https://baike.baidu.com/item/%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6/112715?fr=aladdin - * @link 360百科 https://baike.so.com/doc/5408938-5646935.html - * @link 百科 https://www.baike.com/wikiid/3469869303298461399?prd=home_search&search_id=5bm572esa2k000&view_id=1takcxx7kjc000 - * @link coolsymbol https://coolsymbol.com/ - * @link 维基百科wikipedia https://en.wikipedia.org/wiki/List_of_Unicode_characters#Unicode_symbols - * - * @since 5.6.2 - */ -public class SpecialSymbolUtil { - public static final String UNICODE_START_CHAR = "\\u"; - private SpecialSymbolUtil(){} - - /** - * 获取带圈数字 /封闭式字母数字 ,从1-20,超过1-20报错 - * - * 0 1 2 3 4 5 6 7 8 9 A B C D E F - * U+246x ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ - * U+247x ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ - * U+248x ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ - * U+249x ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ - * U+24Ax ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ - * U+24Bx ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ - * U+24Cx Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ - * U+24Dx ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ - * U+24Ex ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ - * U+24Fx ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿ - * @link Unicode_symbols https://en.wikipedia.org/wiki/List_of_Unicode_characters#Unicode_symbols - * @link Enclosed Alphanumerics https://en.wikipedia.org/wiki/Enclosed_Alphanumerics - * - * - * System.out.println(enclosedAlphanumericsStyle1ByInt(1)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(2)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(3)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(4)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(14)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(18)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(19)); - * System.out.println(enclosedAlphanumericsStyle1ByInt(20)); - * - * - * @param number 十进制数字,从1、-->10、11--->20 - * @return ①②③④⑤⑥⑦⑧⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ - */ - public static String enclosedNumericsByInt(int number) { - if (number <= 0 || number > 20) { - throw new IllegalArgumentException("number取值范围是[1-20]的正整数,包含1和20"); - } - String start = "①"; - String unicodeStart = UnicodeUtil.toUnicode(start).substring(UNICODE_START_CHAR.length(), - UnicodeUtil.toUnicode(start).length() - 1); - // begin: U+246x的24 - String beginHex = unicodeStart.substring(0, 2); - // U+246x的6 - String middleHex = number >= 17 ? "7" : "6"; - // A - String endHex = Integer.toHexString(number >= 17 ? number - 17 : number - 1); - // U + 24 + 60 - String unicodeStr = UNICODE_START_CHAR + beginHex + middleHex + endHex; - return UnicodeUtil.toString(unicodeStr); - } - - /** - * 获取带圈字母 /封闭式字母 ,从a-z or A-Z - * 根据字符 获取 Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ - * - * System.out.println(encloseAlphabetByChar( 'A')); - * System.out.println(encloseAlphabetByChar( 'a')); - * System.out.println(encloseAlphabetByChar( 'z')); - * System.out.println(encloseAlphabetByChar( 'Z')) - * - * @author dazer - * @param letter 字母,不区分大小写,'a'、'b'、'c'、'd'...'x'、'y'、'z'; 'A'、'B'...'Z' - * @date 2021/3/26 18:10 - */ - public static String encloseAlphabetByChar(char letter) { - if (!(letter >= 'a' && letter <= 'z' || letter >= 'A' && letter <= 'Z')) { - throw new IllegalArgumentException("number取值范围是[a-z]、[A-Z]的字符"); - } - // \u24b6 - String start = "Ⓐ"; - String hexStr = UnicodeUtil.toUnicode(start).substring(UNICODE_START_CHAR.length()); - int difference = letter >= 'a' && letter <= 'z' ? (letter - (int)'a') : (letter - (int)'A'); - String hex = new BigInteger(hexStr, 16).add(new BigInteger(String.valueOf(difference), 10)).toString(16); - // - String unicodeStr = UNICODE_START_CHAR + hex; - return UnicodeUtil.toString(unicodeStr); - } -} diff --git a/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java index 0a506061f..ff8c77273 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/UnicodeUtil.java @@ -54,6 +54,30 @@ public class UnicodeUtil { return sb.toString(); } + /** + * 字符编码为Unicode形式 + * + * @param c 被编码的字符 + * @return Unicode字符串 + * @since 5.6.2 + * @see HexUtil#toUnicodeHex(char) + */ + public static String toUnicode(char c) { + return HexUtil.toUnicodeHex(c); + } + + /** + * 字符编码为Unicode形式 + * + * @param c 被编码的字符 + * @return Unicode字符串 + * @since 5.6.2 + * @see HexUtil#toUnicodeHex(int) + */ + public static String toUnicode(int c) { + return HexUtil.toUnicodeHex(c); + } + /** * 字符串编码为Unicode形式 * diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java index fcc47ff9e..eb4ee1d11 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java @@ -366,4 +366,47 @@ public class CharUtil { public static int digit16(int b) { return Character.digit(b, 16); } + + /** + * 将字母、数字转换为带圈的字符: + *
+	 *     '1' -》 '①'
+	 *     'A' -》 'Ⓐ'
+	 *     'a' -》 'ⓐ'
+	 * 
+ * + * @param c 被转换的字符,如果字符不支持转换,返回原字符 + * @return 转换后的字符 + * @since 5.6.2 + */ + public static char toCloseChar(char c){ + int result = c; + if(c >='1' && c <= '9'){ + result = '①' + c - '1'; + } else if(c >='A' && c <= 'Z'){ + result = 'Ⓐ' + c - 'A'; + } else if(c >='a' && c <= 'z'){ + result = 'ⓐ' + c - 'a'; + } + return (char) result; + } + + /** + * 将[1-20]数字转换为带圈的字符: + *
+	 *     1 -》 '①'
+	 *     12 -》 '⑫'
+	 *     20 -》 '⑳'
+	 * 
+ * + * @param number 被转换的数字 + * @return 转换后的字符 + * @since 5.6.2 + */ + public static char toCloseByNumber(int number){ + if(number > 20){ + throw new IllegalArgumentException("Number must be [1-20]"); + } + return (char) ('①' + number - 1); + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java index cf59864ed..a102a88b0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/HexUtil.java @@ -262,7 +262,7 @@ public class HexUtil { * 转换的字符串如果u后不足4位,则前面用0填充,例如: * *
-	 * '我' =》\u4f60
+	 * '你' =》\u4f60
 	 * 
* * @param value int值,也可以是char @@ -287,7 +287,7 @@ public class HexUtil { * 转换的字符串如果u后不足4位,则前面用0填充,例如: * *
-	 * '我' =》\u4f60
+	 * '你' =》'\u4f60'
 	 * 
* * @param ch char值 diff --git a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java index 9af6fcb60..cd99357ff 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java @@ -4,7 +4,7 @@ import org.junit.Assert; import org.junit.Test; public class CharUtilTest { - + @Test public void trimTest() { //此字符串中的第一个字符为不可见字符: '\u202a' @@ -12,13 +12,13 @@ public class CharUtilTest { Assert.assertEquals('\u202a', str.charAt(0)); Assert.assertTrue(CharUtil.isBlankChar(str.charAt(0))); } - + @Test public void isEmojiTest() { String a = "莉🌹"; Assert.assertFalse(CharUtil.isEmoji(a.charAt(0))); Assert.assertTrue(CharUtil.isEmoji(a.charAt(1))); - + } @Test @@ -38,4 +38,18 @@ public class CharUtilTest { char a3 = '\u3000'; Assert.assertTrue(CharUtil.isBlankChar(a3)); } + + @Test + public void toCloseCharTest(){ + Assert.assertEquals('②', CharUtil.toCloseChar('2')); + Assert.assertEquals('Ⓜ', CharUtil.toCloseChar('M')); + Assert.assertEquals('ⓡ', CharUtil.toCloseChar('r')); + } + + @Test + public void toCloseByNumberTest(){ + Assert.assertEquals('②', CharUtil.toCloseByNumber(2)); + Assert.assertEquals('⑫', CharUtil.toCloseByNumber(12)); + Assert.assertEquals('⑳', CharUtil.toCloseByNumber(20)); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java index 64eaa25f9..a87b30ce5 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/HexUtilTest.java @@ -9,26 +9,26 @@ import org.junit.Test; * */ public class HexUtilTest { - + @Test public void hexStrTest(){ String str = "我是一个字符串"; - + String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8); String decodedStr = HexUtil.decodeHexStr(hex); - + Assert.assertEquals(str, decodedStr); } - + @Test public void toUnicodeHexTest() { String unicodeHex = HexUtil.toUnicodeHex('\u2001'); Assert.assertEquals("\\u2001", unicodeHex); - + unicodeHex = HexUtil.toUnicodeHex('你'); Assert.assertEquals("\\u4f60", unicodeHex); } - + @Test public void isHexNumberTest() { String a = "0x3544534F444"; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java index cc61981ef..e55c89c45 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java @@ -58,6 +58,7 @@ public class ServletUtil { public static final String METHOD_TRACE = "TRACE"; // --------------------------------------------------------- getParam start + /** * 获得所有请求参数 * @@ -92,7 +93,7 @@ public class ServletUtil { * @since 4.0.2 */ public static String getBody(ServletRequest request) { - try(final BufferedReader reader = request.getReader()) { + try (final BufferedReader reader = request.getReader()) { return IoUtil.read(reader); } catch (IOException e) { throw new IORuntimeException(e); @@ -117,12 +118,13 @@ public class ServletUtil { // --------------------------------------------------------- getParam end // --------------------------------------------------------- fillBean start + /** * ServletRequest 参数转Bean * - * @param Bean类型 - * @param request ServletRequest - * @param bean Bean + * @param Bean类型 + * @param request ServletRequest + * @param bean Bean * @param copyOptions 注入时的设置 * @return Bean * @since 3.0.4 @@ -133,17 +135,17 @@ public class ServletUtil { @Override public Object value(String key, Type valueType) { String[] values = request.getParameterValues(key); - if(ArrayUtil.isEmpty(values)){ + if (ArrayUtil.isEmpty(values)) { values = request.getParameterValues(beanName + StrUtil.DOT + key); - if(ArrayUtil.isEmpty(values)){ + if (ArrayUtil.isEmpty(values)) { return null; } } - if(1 == values.length){ + if (1 == values.length) { // 单值表单直接返回这个值 return values[0]; - }else{ + } else { // 多值表单返回数组 return values; } @@ -160,9 +162,9 @@ public class ServletUtil { /** * ServletRequest 参数转Bean * - * @param Bean类型 - * @param request {@link ServletRequest} - * @param bean Bean + * @param Bean类型 + * @param request {@link ServletRequest} + * @param bean Bean * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -173,9 +175,9 @@ public class ServletUtil { /** * ServletRequest 参数转Bean * - * @param Bean类型 - * @param request ServletRequest - * @param beanClass Bean Class + * @param Bean类型 + * @param request ServletRequest + * @param beanClass Bean Class * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -202,12 +204,12 @@ public class ServletUtil { * 需要注意的是,使用此方法获取的客户IP地址必须在Http服务器(例如Nginx)中配置头信息,否则容易造成IP伪造。 *

* - * @param request 请求对象{@link HttpServletRequest} + * @param request 请求对象{@link HttpServletRequest} * @param otherHeaderNames 其他自定义头文件,通常在Http服务器(例如Nginx)中配置 * @return IP地址 */ public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) { - String[] headers = { "X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR" }; + String[] headers = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"}; if (ArrayUtil.isNotEmpty(otherHeaderNames)) { headers = ArrayUtil.addAll(headers, otherHeaderNames); } @@ -223,7 +225,7 @@ public class ServletUtil { * 需要注意的是,使用此方法获取的客户IP地址必须在Http服务器(例如Nginx)中配置头信息,否则容易造成IP伪造。 *

* - * @param request 请求对象{@link HttpServletRequest} + * @param request 请求对象{@link HttpServletRequest} * @param headerNames 自定义头,通常在Http服务器(例如Nginx)中配置 * @return IP地址 * @since 4.4.1 @@ -258,7 +260,7 @@ public class ServletUtil { * 包括文件和普通表单数据
* 在同一次请求中,此方法只能被执行一次! * - * @param request {@link ServletRequest} + * @param request {@link ServletRequest} * @param uploadSetting 上传文件的设定,包括最大文件大小、保存在内存的边界大小、临时目录、扩展名限定等 * @return MultiPart表单 * @throws IORuntimeException IO异常 @@ -276,6 +278,7 @@ public class ServletUtil { } // --------------------------------------------------------- Header start + /** * 获取请求所有的头(header)信息 * @@ -300,7 +303,7 @@ public class ServletUtil { /** * 忽略大小写获得请求header中的信息 * - * @param request 请求对象{@link HttpServletRequest} + * @param request 请求对象{@link HttpServletRequest} * @param nameIgnoreCase 忽略大小写头信息的KEY * @return header值 */ @@ -320,8 +323,8 @@ public class ServletUtil { /** * 获得请求header中的信息 * - * @param request 请求对象{@link HttpServletRequest} - * @param name 头信息的KEY + * @param request 请求对象{@link HttpServletRequest} + * @param name 头信息的KEY * @param charsetName 字符集 * @return header值 */ @@ -333,7 +336,7 @@ public class ServletUtil { * 获得请求header中的信息 * * @param request 请求对象{@link HttpServletRequest} - * @param name 头信息的KEY + * @param name 头信息的KEY * @param charset 字符集 * @return header值 * @since 4.6.2 @@ -402,11 +405,12 @@ public class ServletUtil { // --------------------------------------------------------- Header end // --------------------------------------------------------- Cookie start + /** * 获得指定的Cookie * * @param httpServletRequest {@link HttpServletRequest} - * @param name cookie名 + * @param name cookie名 * @return Cookie对象 */ public static Cookie getCookie(HttpServletRequest httpServletRequest, String name) { @@ -421,7 +425,7 @@ public class ServletUtil { */ public static Map readCookieMap(HttpServletRequest httpServletRequest) { final Cookie[] cookies = httpServletRequest.getCookies(); - if(ArrayUtil.isEmpty(cookies)){ + if (ArrayUtil.isEmpty(cookies)) { return MapUtil.empty(); } @@ -435,7 +439,7 @@ public class ServletUtil { * 设定返回给客户端的Cookie * * @param response 响应对象{@link HttpServletResponse} - * @param cookie Servlet Cookie对象 + * @param cookie Servlet Cookie对象 */ public static void addCookie(HttpServletResponse response, Cookie cookie) { response.addCookie(cookie); @@ -445,8 +449,8 @@ public class ServletUtil { * 设定返回给客户端的Cookie * * @param response 响应对象{@link HttpServletResponse} - * @param name Cookie名 - * @param value Cookie值 + * @param name Cookie名 + * @param value Cookie值 */ public static void addCookie(HttpServletResponse response, String name, String value) { response.addCookie(new Cookie(name, value)); @@ -455,12 +459,12 @@ public class ServletUtil { /** * 设定返回给客户端的Cookie * - * @param response 响应对象{@link HttpServletResponse} - * @param name cookie名 - * @param value cookie值 + * @param response 响应对象{@link HttpServletResponse} + * @param name cookie名 + * @param value cookie值 * @param maxAgeInSeconds -1: 关闭浏览器清除Cookie. 0: 立即清除Cookie. >0 : Cookie存在的秒数. - * @param path Cookie的有效路径 - * @param domain the domain name within which this cookie is visible; form is according to RFC 2109 + * @param path Cookie的有效路径 + * @param domain the domain name within which this cookie is visible; form is according to RFC 2109 */ public static void addCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds, String path, String domain) { Cookie cookie = new Cookie(name, value); @@ -477,9 +481,9 @@ public class ServletUtil { * Path: "/"
* No Domain * - * @param response 响应对象{@link HttpServletResponse} - * @param name cookie名 - * @param value cookie值 + * @param response 响应对象{@link HttpServletResponse} + * @param name cookie名 + * @param value cookie值 * @param maxAgeInSeconds -1: 关闭浏览器清除Cookie. 0: 立即清除Cookie. >0 : Cookie存在的秒数. */ public static void addCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds) { @@ -488,6 +492,7 @@ public class ServletUtil { // --------------------------------------------------------- Cookie end // --------------------------------------------------------- Response start + /** * 获得PrintWriter * @@ -506,8 +511,8 @@ public class ServletUtil { /** * 返回数据给客户端 * - * @param response 响应对象{@link HttpServletResponse} - * @param text 返回的内容 + * @param response 响应对象{@link HttpServletResponse} + * @param text 返回的内容 * @param contentType 返回的类型 */ public static void write(HttpServletResponse response, String text, String contentType) { @@ -528,7 +533,7 @@ public class ServletUtil { * 返回文件给客户端 * * @param response 响应对象{@link HttpServletResponse} - * @param file 写出的文件对象 + * @param file 写出的文件对象 * @since 4.1.15 */ public static void write(HttpServletResponse response, File file) { @@ -546,21 +551,21 @@ public class ServletUtil { /** * 返回数据给客户端 * - * @param response 响应对象{@link HttpServletResponse} - * @param in 需要返回客户端的内容 + * @param response 响应对象{@link HttpServletResponse} + * @param in 需要返回客户端的内容 * @param contentType 返回的类型 - * 如: - * 1、application/pdf、 - * 2、application/vnd.ms-excel、 - * 3、application/msword、 - * 4、application/vnd.ms-powerpoint - * docx、xlsx 这种 office 2007 格式 设置 MIME;网页里面docx 文件是没问题,但是下载下来了之后就变成doc格式了 - * https://blog.csdn.net/cyh2260629/article/details/73824760 - * 5、MIME_EXCELX_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - * 6、MIME_PPTX_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - * 7、MIME_WORDX_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; - * 8、MIME_STREAM_TYPE = "application/octet-stream;charset=utf-8"; #原始字节流 - * @param fileName 文件名 + * 如: + * 1、application/pdf、 + * 2、application/vnd.ms-excel、 + * 3、application/msword、 + * 4、application/vnd.ms-powerpoint + * docx、xlsx 这种 office 2007 格式 设置 MIME;网页里面docx 文件是没问题,但是下载下来了之后就变成doc格式了 + * https://blog.csdn.net/cyh2260629/article/details/73824760 + * 5、MIME_EXCELX_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + * 6、MIME_PPTX_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + * 7、MIME_WORDX_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + * 8、MIME_STREAM_TYPE = "application/octet-stream;charset=utf-8"; #原始字节流 + * @param fileName 文件名 * @since 4.1.15 */ public static void write(HttpServletResponse response, InputStream in, String contentType, String fileName) { @@ -573,8 +578,8 @@ public class ServletUtil { /** * 返回数据给客户端 * - * @param response 响应对象{@link HttpServletResponse} - * @param in 需要返回客户端的内容 + * @param response 响应对象{@link HttpServletResponse} + * @param in 需要返回客户端的内容 * @param contentType 返回的类型 */ public static void write(HttpServletResponse response, InputStream in, String contentType) { @@ -586,7 +591,7 @@ public class ServletUtil { * 返回数据给客户端 * * @param response 响应对象{@link HttpServletResponse} - * @param in 需要返回客户端的内容 + * @param in 需要返回客户端的内容 */ public static void write(HttpServletResponse response, InputStream in) { write(response, in, IoUtil.DEFAULT_BUFFER_SIZE); @@ -595,8 +600,8 @@ public class ServletUtil { /** * 返回数据给客户端 * - * @param response 响应对象{@link HttpServletResponse} - * @param in 需要返回客户端的内容 + * @param response 响应对象{@link HttpServletResponse} + * @param in 需要返回客户端的内容 * @param bufferSize 缓存大小 */ public static void write(HttpServletResponse response, InputStream in, int bufferSize) { @@ -616,15 +621,15 @@ public class ServletUtil { * 设置响应的Header * * @param response 响应对象{@link HttpServletResponse} - * @param name 名 - * @param value 值,可以是String,Date, int + * @param name 名 + * @param value 值,可以是String,Date, int */ public static void setHeader(HttpServletResponse response, String name, Object value) { if (value instanceof String) { response.setHeader(name, (String) value); } else if (Date.class.isAssignableFrom(value.getClass())) { response.setDateHeader(name, ((Date) value).getTime()); - } else if (value instanceof Integer || "int".equals(value.getClass().getSimpleName().toLowerCase())) { + } else if (value instanceof Integer || "int".equalsIgnoreCase(value.getClass().getSimpleName())) { response.setIntHeader(name, (int) value); } else { response.setHeader(name, value.toString()); diff --git a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java index 3946869f5..82dd8651e 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/servlet/ServletUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.extra.servlet; +import org.junit.Ignore; import org.junit.Test; import javax.servlet.http.HttpServletResponse; @@ -8,18 +9,22 @@ import java.nio.charset.StandardCharsets; /** * ServletUtil工具类测试 + * * @author dazer * @date 2021/3/24 15:02 * @see ServletUtil */ public class ServletUtilTest { + @Test + @Ignore public void writeTest() { HttpServletResponse response = null; - byte[] bytes = new String("地球是我们共同的家园,需要大家珍惜.").getBytes(StandardCharsets.UTF_8); + byte[] bytes = "地球是我们共同的家园,需要大家珍惜.".getBytes(StandardCharsets.UTF_8); //下载文件 // 这里没法直接测试,直接写到这里,方便调用; + //noinspection ConstantConditions if (response != null) { String fileName = "签名文件.pdf"; String contentType = "application/pdf";// application/octet-stream、image/jpeg、image/gif From 825c55a2e275bbe3d8034de1c3732a033d9fcff1 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 12:31:44 +0800 Subject: [PATCH 10/17] update beeCP --- CHANGELOG.md | 3 ++- hutool-db/pom.xml | 4 ++-- .../src/main/java/cn/hutool/db/ds/bee/BeeDSFactory.java | 7 +------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb628af91..bc42a32b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.6.2 (2021-03-26) +# 5.6.2 (2021-03-28) ### 新特性 * 【core 】 Validator增加车架号(车辆识别码)验证、驾驶证(驾驶证档案编号)的正则校验(pr#280@Gitee) @@ -13,6 +13,7 @@ * 【core 】 增加DateTime字符串构造(issue#I3CQZG@Gitee) * 【core 】 修改ArrayUtil代码风格(pr#287@Gitee) * 【json 】 JSONConfig增加setStripTrailingZeros配置(issue#I3DJI8@Gitee) +* 【db 】 升级兼容BeeCP3.x ### Bug修复 * 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) diff --git a/hutool-db/pom.xml b/hutool-db/pom.xml index 32d7bad59..3cdb3a124 100644 --- a/hutool-db/pom.xml +++ b/hutool-db/pom.xml @@ -79,8 +79,8 @@ com.github.chris2018998 - BeeCP - 2.5.3 + beecp + 3.1.2 slf4j-api diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/bee/BeeDSFactory.java b/hutool-db/src/main/java/cn/hutool/db/ds/bee/BeeDSFactory.java index d891d9ea2..b3bfb11c4 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/bee/BeeDSFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/bee/BeeDSFactory.java @@ -10,7 +10,7 @@ import javax.sql.DataSource; /** * BeeCP数据源工厂类 - * + * * @author Looly * */ @@ -33,11 +33,6 @@ public class BeeDSFactory extends AbstractDSFactory { final BeeDataSourceConfig beeConfig = new BeeDataSourceConfig(driver, jdbcUrl, user, pass); poolSetting.toBean(beeConfig); - // 修复BeeCP默认参数无效问题 - if(beeConfig.getBorrowConcurrentSize() > beeConfig.getMaxActive()){ - beeConfig.setMaxActive(beeConfig.getBorrowConcurrentSize() + 1); - } - // remarks等特殊配置,since 5.3.8 String connValue; for (String key : KEY_CONN_PROPS) { From 68d5cf35d4df7041148d635e8db24ec738d8be72 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:02:28 +0800 Subject: [PATCH 11/17] add wit support --- .../template/engine/enjoy/EnjoyEngine.java | 5 ++- .../extra/template/engine/wit/WitEngine.java | 35 +++++++++++++++++-- .../extra/template/TemplateUtilTest.java | 16 +++++++-- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java index 2c2546012..59c1c815e 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java @@ -9,6 +9,8 @@ import cn.hutool.extra.template.TemplateConfig.ResourceMode; import cn.hutool.extra.template.TemplateEngine; import com.jfinal.template.source.FileSourceFactory; +import java.io.File; + /** * Enjoy库的引擎包装 * @@ -99,7 +101,8 @@ public class EnjoyEngine implements TemplateEngine { break; case WEB_ROOT: engine.setSourceFactory(new FileSourceFactory()); - engine.setBaseTemplatePath(FileUtil.getAbsolutePath(FileUtil.getWebRoot())); + final File root = FileUtil.file(FileUtil.getWebRoot(), config.getPath()); + engine.setBaseTemplatePath(FileUtil.getAbsolutePath(root)); break; default: break; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java index 565294642..07ebb573b 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java @@ -1,11 +1,16 @@ package cn.hutool.extra.template.engine.wit; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateException; import org.febit.wit.Engine; import org.febit.wit.exceptions.ResourceNotFoundException; +import org.febit.wit.util.Props; + +import java.io.File; /** * Wit(http://zqq90.github.io/webit-script/)模板引擎封装 @@ -75,10 +80,34 @@ public class WitEngine implements TemplateEngine { * @return {@link Engine} */ private static Engine createEngine(TemplateConfig config) { - if (null == config) { - config = TemplateConfig.DEFAULT; + final Props configProps = Engine.createConfigProps(""); + Dict dict = null; + + if (null != config) { + dict = Dict.create(); + // 自定义编码 + dict.set("DEFAULT_ENCODING", config.getCharset()); + + switch (config.getResourceMode()){ + case CLASSPATH: + configProps.set("pathLoader.root", config.getPath()); + configProps.set("routeLoader.defaultLoader", "classpathLoader"); + break; + case STRING: + configProps.set("routeLoader.defaultLoader", "stringLoader"); + break; + case FILE: + configProps.set("pathLoader.root", config.getPath()); + configProps.set("routeLoader.defaultLoader", "fileLoader"); + break; + case WEB_ROOT: + final File root = FileUtil.file(FileUtil.getWebRoot(), config.getPath()); + configProps.set("pathLoader.root", FileUtil.getAbsolutePath(root)); + configProps.set("routeLoader.defaultLoader", "fileLoader"); + break; + } } - return Engine.create(); + return Engine.create(configProps,dict); } } diff --git a/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java index 229e7c62d..c7db4fa11 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/template/TemplateUtilTest.java @@ -157,10 +157,20 @@ public class TemplateUtilTest { @Test public void WitEngineTest() { - TemplateEngine engine = TemplateUtil.createEngine( - new TemplateConfig("templates", ResourceMode.CLASSPATH).setCustomEngine(WitEngine.class)); - Template template = engine.getTemplate("/templates/wit_test.wit"); + //classpath模板 + TemplateConfig config = new TemplateConfig("templates", ResourceMode.CLASSPATH) + .setCustomEngine(WitEngine.class); + TemplateEngine engine = TemplateUtil.createEngine(config); + Template template = engine.getTemplate("/wit_test.wit"); String result = template.render(Dict.create().set("name", "hutool")); Assert.assertEquals("hello,hutool", StrUtil.trim(result)); + + // 字符串模板 + config = new TemplateConfig("templates", ResourceMode.STRING) + .setCustomEngine(WitEngine.class); + engine = TemplateUtil.createEngine(config); + template = engine.getTemplate("<%var name;%>hello,${name}"); + result = template.render(Dict.create().set("name", "hutool")); + Assert.assertEquals("hello,hutool", StrUtil.trim(result)); } } From e8d15ec29c72b7044b77036e72f99dc2ee861bb5 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:21:36 +0800 Subject: [PATCH 12/17] fix url path bug --- CHANGELOG.md | 1 + .../src/main/java/cn/hutool/core/net/url/UrlPath.java | 2 +- .../src/test/java/cn/hutool/core/net/UrlBuilderTest.java | 8 ++++++++ .../src/test/java/cn/hutool/http/HttpUtilTest.java | 7 +++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc42a32b4..eb44f6931 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Bug修复 * 【core 】 修复FileTypeUtil中OFD格式判断问题(pr#1489@Github) * 【core 】 修复CamelCaseLinkedMap和CaseInsensitiveLinkedMap的Linked失效问题(pr#1490@Github) +* 【core 】 修复UrlPath中=被转义的问题 ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java index 2f12c244b..099781cc6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java @@ -128,7 +128,7 @@ public class UrlPath { final StringBuilder builder = new StringBuilder(); for (String segment : segments) { - builder.append(CharUtil.SLASH).append(URLUtil.encodeAll(segment, charset)); + builder.append(CharUtil.SLASH).append(URLUtil.encodeQuery(segment, charset)); } if (withEngTag || StrUtil.isEmpty(builder)) { builder.append(CharUtil.SLASH); diff --git a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java index 78307e15a..c96601c33 100644 --- a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java @@ -235,4 +235,12 @@ public class UrlBuilderTest { final UrlBuilder urlBuilder = UrlBuilder.of(webUrl, StandardCharsets.UTF_8); Assert.assertEquals("a=123&b=4%3F6&c=789", urlBuilder.getQueryStr()); } + + @Test + public void encodePathTest(){ + // Path中的某些符号无需转义,比如= + final String urlStr = "http://hq.sinajs.cn/list=sh600519"; + final UrlBuilder urlBuilder = UrlBuilder.ofHttp(urlStr, CharsetUtil.CHARSET_UTF_8); + Assert.assertEquals(urlStr, urlBuilder.toString()); + } } diff --git a/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java b/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java index 4a7aa3c1f..12ccdcdcb 100644 --- a/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java @@ -318,4 +318,11 @@ public class HttpUtilTest { final String s = HttpUtil.get(url); Console.log(s); } + + @Test + @Ignore + public void sinajsTest(){ + final String s = HttpUtil.get("http://hq.sinajs.cn/list=sh600519"); + Console.log(s); + } } From 8d28db0e94349a9f2c13cd421f4b255406a21ccb Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:24:41 +0800 Subject: [PATCH 13/17] fix comment --- .../java/cn/hutool/core/util/DesensitizedUtil.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java index cc0564b7f..9f6cbdd0c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java @@ -192,7 +192,7 @@ public class DesensitizedUtil { } /** - * 【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com> + * 【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com * * @param email 邮箱 * @return 脱敏后的邮箱 @@ -223,11 +223,11 @@ public class DesensitizedUtil { /** * 【中国车牌】车牌中间用*代替 - * eg1:null => "" - * eg1:"" => "" - * eg3:苏D40000 => 苏D4***0 - * eg4:陕A12345D => 陕A1****D - * eg5:京A123 => 京A123 如果是错误的车牌,不处理 + * eg1:null -》 "" + * eg1:"" -》 "" + * eg3:苏D40000 -》 苏D4***0 + * eg4:陕A12345D -》 陕A1****D + * eg5:京A123 -》 京A123 如果是错误的车牌,不处理 * * @param carLicense 完整的车牌号 * @return 脱敏后的车牌 From 4c74a7defc6f7800a1c72aea901edc9739eda5cc Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:30:12 +0800 Subject: [PATCH 14/17] fix path encode --- hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java index 099781cc6..e3e0632d3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java @@ -128,7 +128,7 @@ public class UrlPath { final StringBuilder builder = new StringBuilder(); for (String segment : segments) { - builder.append(CharUtil.SLASH).append(URLUtil.encodeQuery(segment, charset)); + builder.append(CharUtil.SLASH).append(URLUtil.encode(segment, charset)); } if (withEngTag || StrUtil.isEmpty(builder)) { builder.append(CharUtil.SLASH); From 4e05301cf5d9d9e10138377bc6a8b57e28df9bde Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:43:06 +0800 Subject: [PATCH 15/17] update dependency --- hutool-aop/pom.xml | 2 +- hutool-db/pom.xml | 4 ++-- hutool-extra/pom.xml | 8 ++++---- hutool-poi/pom.xml | 2 +- hutool-system/pom.xml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/hutool-aop/pom.xml b/hutool-aop/pom.xml index 2fb47dbec..2929ee993 100644 --- a/hutool-aop/pom.xml +++ b/hutool-aop/pom.xml @@ -19,7 +19,7 @@ 3.3.0 - 5.3.4 + 5.3.5 diff --git a/hutool-db/pom.xml b/hutool-db/pom.xml index 3cdb3a124..51786c3e8 100644 --- a/hutool-db/pom.xml +++ b/hutool-db/pom.xml @@ -26,7 +26,7 @@ 3.12.8 3.34.0 2.5.1 - 3.5.1 + 3.5.2 @@ -148,7 +148,7 @@ org.postgresql postgresql - 42.2.18.jre7 + 42.2.19.jre7 test diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index a15174f2b..b7b3555a5 100644 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -30,7 +30,7 @@ 3.7.2 5.1.1 4.0.1 - 2.4.3 + 2.4.4 3.3.0 @@ -241,7 +241,7 @@ org.apache.lucene lucene-analyzers-smartcn - 8.7.0 + 8.8.1 true @@ -426,7 +426,7 @@ org.springframework spring-expression - 5.3.2 + 5.3.5 compile true @@ -448,7 +448,7 @@ org.tukaani xz - 1.8 + 1.9 test diff --git a/hutool-poi/pom.xml b/hutool-poi/pom.xml index eb0e66f81..2d3b2609c 100644 --- a/hutool-poi/pom.xml +++ b/hutool-poi/pom.xml @@ -44,7 +44,7 @@ org.ofdrw ofdrw-full - 1.7.3 + 1.7.4 compile true diff --git a/hutool-system/pom.xml b/hutool-system/pom.xml index b8020dafb..5114cf416 100644 --- a/hutool-system/pom.xml +++ b/hutool-system/pom.xml @@ -26,7 +26,7 @@ com.github.oshi oshi-core - 5.6.0 + 5.6.1 provided From 068e51e126e843c4afd4e66b0a68fafd484f8d88 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 14:43:42 +0800 Subject: [PATCH 16/17] release 5.6.2 --- hutool-all/pom.xml | 2 +- hutool-aop/pom.xml | 2 +- hutool-bloomFilter/pom.xml | 2 +- hutool-bom/pom.xml | 2 +- hutool-cache/pom.xml | 2 +- hutool-captcha/pom.xml | 2 +- hutool-core/pom.xml | 2 +- hutool-cron/pom.xml | 2 +- hutool-crypto/pom.xml | 2 +- hutool-db/pom.xml | 2 +- hutool-dfa/pom.xml | 2 +- hutool-extra/pom.xml | 2 +- hutool-http/pom.xml | 2 +- hutool-json/pom.xml | 2 +- hutool-log/pom.xml | 2 +- hutool-poi/pom.xml | 2 +- hutool-script/pom.xml | 2 +- hutool-setting/pom.xml | 2 +- hutool-socket/pom.xml | 2 +- hutool-system/pom.xml | 2 +- pom.xml | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/hutool-all/pom.xml b/hutool-all/pom.xml index 6a23f4092..1bd3a9fa0 100644 --- a/hutool-all/pom.xml +++ b/hutool-all/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-all diff --git a/hutool-aop/pom.xml b/hutool-aop/pom.xml index 2929ee993..71942c48e 100644 --- a/hutool-aop/pom.xml +++ b/hutool-aop/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-aop diff --git a/hutool-bloomFilter/pom.xml b/hutool-bloomFilter/pom.xml index 8260b74a2..6b53ad008 100644 --- a/hutool-bloomFilter/pom.xml +++ b/hutool-bloomFilter/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-bloomFilter diff --git a/hutool-bom/pom.xml b/hutool-bom/pom.xml index 10ee09d92..40b190ace 100644 --- a/hutool-bom/pom.xml +++ b/hutool-bom/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-bom diff --git a/hutool-cache/pom.xml b/hutool-cache/pom.xml index 23d62a160..fed3dfd50 100644 --- a/hutool-cache/pom.xml +++ b/hutool-cache/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-cache diff --git a/hutool-captcha/pom.xml b/hutool-captcha/pom.xml index 694428386..e151d7b9c 100644 --- a/hutool-captcha/pom.xml +++ b/hutool-captcha/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-captcha diff --git a/hutool-core/pom.xml b/hutool-core/pom.xml index f48f5fbdd..7b1cbfc03 100644 --- a/hutool-core/pom.xml +++ b/hutool-core/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-core diff --git a/hutool-cron/pom.xml b/hutool-cron/pom.xml index ea4a158ed..943525413 100644 --- a/hutool-cron/pom.xml +++ b/hutool-cron/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-cron diff --git a/hutool-crypto/pom.xml b/hutool-crypto/pom.xml index 3d437ae3c..4d4e88cb2 100644 --- a/hutool-crypto/pom.xml +++ b/hutool-crypto/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-crypto diff --git a/hutool-db/pom.xml b/hutool-db/pom.xml index 51786c3e8..91b0c0a5d 100644 --- a/hutool-db/pom.xml +++ b/hutool-db/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-db diff --git a/hutool-dfa/pom.xml b/hutool-dfa/pom.xml index 457463940..570acc9e8 100644 --- a/hutool-dfa/pom.xml +++ b/hutool-dfa/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-dfa diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index b7b3555a5..b733c097a 100644 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-extra diff --git a/hutool-http/pom.xml b/hutool-http/pom.xml index d4dacd2b4..dface0f3a 100644 --- a/hutool-http/pom.xml +++ b/hutool-http/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-http diff --git a/hutool-json/pom.xml b/hutool-json/pom.xml index 0073c79ed..6b271552b 100644 --- a/hutool-json/pom.xml +++ b/hutool-json/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-json diff --git a/hutool-log/pom.xml b/hutool-log/pom.xml index e71e2655b..fc33f0fd2 100644 --- a/hutool-log/pom.xml +++ b/hutool-log/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-log diff --git a/hutool-poi/pom.xml b/hutool-poi/pom.xml index 2d3b2609c..2378db04a 100644 --- a/hutool-poi/pom.xml +++ b/hutool-poi/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-poi diff --git a/hutool-script/pom.xml b/hutool-script/pom.xml index 81d6bef8d..8d909cc37 100644 --- a/hutool-script/pom.xml +++ b/hutool-script/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-script diff --git a/hutool-setting/pom.xml b/hutool-setting/pom.xml index 169523f44..1686a0964 100644 --- a/hutool-setting/pom.xml +++ b/hutool-setting/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-setting diff --git a/hutool-socket/pom.xml b/hutool-socket/pom.xml index b22e314cf..0e55a0005 100644 --- a/hutool-socket/pom.xml +++ b/hutool-socket/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-socket diff --git a/hutool-system/pom.xml b/hutool-system/pom.xml index 5114cf416..f862da491 100644 --- a/hutool-system/pom.xml +++ b/hutool-system/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool-system diff --git a/pom.xml b/pom.xml index 419f5f865..4dbd2b44d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2-SNAPSHOT + 5.6.2 hutool Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 https://github.com/looly/hutool From 9989247781ddf40d7a7cfdf552ea574ffa12bc46 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 28 Mar 2021 15:04:50 +0800 Subject: [PATCH 17/17] prepare 5.6.3 --- CHANGELOG.md | 7 +++++++ README-EN.md | 8 ++++---- README.md | 6 +++--- bin/version.txt | 2 +- docs/js/version.js | 2 +- hutool-all/pom.xml | 2 +- hutool-aop/pom.xml | 2 +- hutool-bloomFilter/pom.xml | 2 +- hutool-bom/pom.xml | 2 +- hutool-cache/pom.xml | 2 +- hutool-captcha/pom.xml | 2 +- hutool-core/pom.xml | 2 +- hutool-cron/pom.xml | 2 +- hutool-crypto/pom.xml | 2 +- hutool-db/pom.xml | 2 +- hutool-dfa/pom.xml | 2 +- hutool-extra/pom.xml | 2 +- hutool-http/pom.xml | 2 +- hutool-json/pom.xml | 2 +- hutool-log/pom.xml | 2 +- hutool-poi/pom.xml | 2 +- hutool-script/pom.xml | 2 +- hutool-setting/pom.xml | 2 +- hutool-socket/pom.xml | 2 +- hutool-system/pom.xml | 2 +- pom.xml | 2 +- 26 files changed, 37 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb44f6931..30aa85d8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ ------------------------------------------------------------------------------------------------------------- +# 5.6.3 (2021-03-28) + +### 新特性 +### Bug修复 + +------------------------------------------------------------------------------------------------------------- + # 5.6.2 (2021-03-28) ### 新特性 diff --git a/README-EN.md b/README-EN.md index 2a7e08f45..aa23438ae 100644 --- a/README-EN.md +++ b/README-EN.md @@ -125,19 +125,19 @@ Each module can be introduced individually, or all modules can be introduced by cn.hutool hutool-all - 5.6.2 + 5.6.3 ``` ### Gradle ``` -compile 'cn.hutool:hutool-all:5.6.2' +compile 'cn.hutool:hutool-all:5.6.3' ``` ## Download -- [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.6.2/) -- [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.6.2/) +- [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.6.3/) +- [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.6.3/) > note: > Hutool 5.x supports JDK8+ and is not tested on Android platforms, and cannot guarantee that all tool classes or tool methods are available. diff --git a/README.md b/README.md index a267f4859..e0c668db1 100644 --- a/README.md +++ b/README.md @@ -123,20 +123,20 @@ Hutool的存在就是为了减少代码搜索成本,避免网络上参差不 cn.hutool hutool-all - 5.6.2 + 5.6.3 ``` ### Gradle ``` -compile 'cn.hutool:hutool-all:5.6.2' +compile 'cn.hutool:hutool-all:5.6.3' ``` ### 非Maven项目 点击以下任一链接,下载`hutool-all-X.X.X.jar`即可: -- [Maven中央库](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.6.2/) +- [Maven中央库](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.6.3/) > 注意 > Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。 diff --git a/bin/version.txt b/bin/version.txt index d6a86bf43..803d94e16 100755 --- a/bin/version.txt +++ b/bin/version.txt @@ -1 +1 @@ -5.6.2 +5.6.3 diff --git a/docs/js/version.js b/docs/js/version.js index 80f1a26a5..0754af827 100644 --- a/docs/js/version.js +++ b/docs/js/version.js @@ -1 +1 @@ -var version = '5.6.2' \ No newline at end of file +var version = '5.6.3' \ No newline at end of file diff --git a/hutool-all/pom.xml b/hutool-all/pom.xml index 1bd3a9fa0..a5b843dd6 100644 --- a/hutool-all/pom.xml +++ b/hutool-all/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-all diff --git a/hutool-aop/pom.xml b/hutool-aop/pom.xml index 71942c48e..161c68591 100644 --- a/hutool-aop/pom.xml +++ b/hutool-aop/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-aop diff --git a/hutool-bloomFilter/pom.xml b/hutool-bloomFilter/pom.xml index 6b53ad008..f195168ba 100644 --- a/hutool-bloomFilter/pom.xml +++ b/hutool-bloomFilter/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-bloomFilter diff --git a/hutool-bom/pom.xml b/hutool-bom/pom.xml index 40b190ace..f0ce4b01a 100644 --- a/hutool-bom/pom.xml +++ b/hutool-bom/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-bom diff --git a/hutool-cache/pom.xml b/hutool-cache/pom.xml index fed3dfd50..a41531a53 100644 --- a/hutool-cache/pom.xml +++ b/hutool-cache/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-cache diff --git a/hutool-captcha/pom.xml b/hutool-captcha/pom.xml index e151d7b9c..5d2e517f9 100644 --- a/hutool-captcha/pom.xml +++ b/hutool-captcha/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-captcha diff --git a/hutool-core/pom.xml b/hutool-core/pom.xml index 7b1cbfc03..2333433d3 100644 --- a/hutool-core/pom.xml +++ b/hutool-core/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-core diff --git a/hutool-cron/pom.xml b/hutool-cron/pom.xml index 943525413..89c6e06fc 100644 --- a/hutool-cron/pom.xml +++ b/hutool-cron/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-cron diff --git a/hutool-crypto/pom.xml b/hutool-crypto/pom.xml index 4d4e88cb2..92ceea789 100644 --- a/hutool-crypto/pom.xml +++ b/hutool-crypto/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-crypto diff --git a/hutool-db/pom.xml b/hutool-db/pom.xml index 91b0c0a5d..d3d9f69e6 100644 --- a/hutool-db/pom.xml +++ b/hutool-db/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-db diff --git a/hutool-dfa/pom.xml b/hutool-dfa/pom.xml index 570acc9e8..0a525e1c9 100644 --- a/hutool-dfa/pom.xml +++ b/hutool-dfa/pom.xml @@ -7,7 +7,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-dfa diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index b733c097a..db3b71e3d 100644 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-extra diff --git a/hutool-http/pom.xml b/hutool-http/pom.xml index dface0f3a..296577915 100644 --- a/hutool-http/pom.xml +++ b/hutool-http/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-http diff --git a/hutool-json/pom.xml b/hutool-json/pom.xml index 6b271552b..603d90c80 100644 --- a/hutool-json/pom.xml +++ b/hutool-json/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-json diff --git a/hutool-log/pom.xml b/hutool-log/pom.xml index fc33f0fd2..b930e3eac 100644 --- a/hutool-log/pom.xml +++ b/hutool-log/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-log diff --git a/hutool-poi/pom.xml b/hutool-poi/pom.xml index 2378db04a..af49e29dc 100644 --- a/hutool-poi/pom.xml +++ b/hutool-poi/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-poi diff --git a/hutool-script/pom.xml b/hutool-script/pom.xml index 8d909cc37..3012df219 100644 --- a/hutool-script/pom.xml +++ b/hutool-script/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-script diff --git a/hutool-setting/pom.xml b/hutool-setting/pom.xml index 1686a0964..407dae93c 100644 --- a/hutool-setting/pom.xml +++ b/hutool-setting/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-setting diff --git a/hutool-socket/pom.xml b/hutool-socket/pom.xml index 0e55a0005..f75081a14 100644 --- a/hutool-socket/pom.xml +++ b/hutool-socket/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-socket diff --git a/hutool-system/pom.xml b/hutool-system/pom.xml index f862da491..8d029f5aa 100644 --- a/hutool-system/pom.xml +++ b/hutool-system/pom.xml @@ -9,7 +9,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool-system diff --git a/pom.xml b/pom.xml index 4dbd2b44d..37ee64685 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ cn.hutool hutool-parent - 5.6.2 + 5.6.3-SNAPSHOT hutool Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 https://github.com/looly/hutool