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 extends K, ? extends V> 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 extends K, ? extends V> 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());
}
+ /**
+ * 构造格式:
+ *
+ * - yyyy-MM-dd HH:mm:ss
+ * - yyyy/MM/dd HH:mm:ss
+ * - yyyy.MM.dd HH:mm:ss
+ * - yyyy年MM月dd日 HH时mm分ss秒
+ * - yyyy-MM-dd
+ * - yyyy/MM/dd
+ * - yyyy.MM.dd
+ * - HH:mm:ss
+ * - HH时mm分ss秒
+ * - yyyy-MM-dd HH:mm
+ * - yyyy-MM-dd HH:mm:ss.SSS
+ * - yyyyMMddHHmmss
+ * - yyyyMMddHHmmssSSS
+ * - yyyyMMdd
+ * - EEE, dd MMM yyyy HH:mm:ss z
+ * - EEE MMM dd HH:mm:ss zzz yyyy
+ * - yyyy-MM-dd'T'HH:mm:ss'Z'
+ * - yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
+ * - yyyy-MM-dd'T'HH:mm:ssZ
+ * - yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ *
+ *
+ * @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