Merge remote-tracking branch 'upstream/v5-dev' into v5-dev

This commit is contained in:
lzpeng723 2020-12-02 21:51:10 +08:00
commit 0142354103
38 changed files with 94 additions and 77 deletions

View File

@ -3,6 +3,16 @@
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.5.3 (2020-12-02)
### 新特性
* 【core 】 IdcardUtil增加行政区划83issue#1277@Github
* 【core 】 multipart中int改为long解决大文件上传越界问题issue#I27WZ3@Gitee
### Bug修复
-------------------------------------------------------------------------------------------------------------
# 5.5.2 (2020-12-01) # 5.5.2 (2020-12-01)
### 新特性 ### 新特性

View File

@ -125,19 +125,19 @@ Each module can be introduced individually, or all modules can be introduced by
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.5.2</version> <version>5.5.3</version>
</dependency> </dependency>
``` ```
### Gradle ### Gradle
``` ```
compile 'cn.hutool:hutool-all:5.5.2' compile 'cn.hutool:hutool-all:5.5.3'
``` ```
## Download ## Download
- [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.2/) - [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
- [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.2/) - [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
> note: > 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. > Hutool 5.x supports JDK8+ and is not tested on Android platforms, and cannot guarantee that all tool classes or tool methods are available.

View File

@ -123,21 +123,21 @@ Hutool的存在就是为了减少代码搜索成本避免网络上参差不
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.5.2</version> <version>5.5.3</version>
</dependency> </dependency>
``` ```
### Gradle ### Gradle
``` ```
compile 'cn.hutool:hutool-all:5.5.2' compile 'cn.hutool:hutool-all:5.5.3'
``` ```
### 非Maven项目 ### 非Maven项目
点击以下任一链接,下载`hutool-all-X.X.X.jar`即可: 点击以下任一链接,下载`hutool-all-X.X.X.jar`即可:
- [Maven中央库1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.2/) - [Maven中央库1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
- [Maven中央库2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.2/) - [Maven中央库2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
> 注意 > 注意
> Hutool 5.x支持JDK8+对Android平台没有测试不能保证所有工具类或工具方法可用。 > Hutool 5.x支持JDK8+对Android平台没有测试不能保证所有工具类或工具方法可用。

View File

@ -1 +1 @@
5.5.2 5.5.3

View File

@ -1 +1 @@
var version = '5.5.2' var version = '5.5.3'

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-aop</artifactId> <artifactId>hutool-aop</artifactId>
@ -19,7 +19,7 @@
<properties> <properties>
<!-- versions --> <!-- versions -->
<cglib.version>3.3.0</cglib.version> <cglib.version>3.3.0</cglib.version>
<spring.version>5.2.9.RELEASE</spring.version> <spring.version>5.3.1</spring.version>
</properties> </properties>
<dependencies> <dependencies>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-bloomFilter</artifactId> <artifactId>hutool-bloomFilter</artifactId>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-bom</artifactId> <artifactId>hutool-bom</artifactId>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-cache</artifactId> <artifactId>hutool-cache</artifactId>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-captcha</artifactId> <artifactId>hutool-captcha</artifactId>

View File

@ -38,7 +38,7 @@ public class GifCaptcha extends AbstractCaptcha {
* @param height 验证码高度 * @param height 验证码高度
*/ */
public GifCaptcha(int width, int height) { public GifCaptcha(int width, int height) {
this(width, height, 100); this(width, height, 5);
} }
/** /**

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-core</artifactId> <artifactId>hutool-core</artifactId>

View File

@ -2,9 +2,9 @@ package cn.hutool.core.net.multipart;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.map.multi.ListValueMap; import cn.hutool.core.map.multi.ListValueMap;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -78,10 +78,7 @@ public class MultipartFormData {
putFile(header.formFieldName, newFile); putFile(header.formFieldName, newFile);
} else { } else {
// 标准表单项 // 标准表单项
ByteArrayOutputStream fbos = new ByteArrayOutputStream(1024); putParameter(header.formFieldName, IoUtil.read(input, charset));
input.copy(fbos);
String value = (charset != null) ? new String(fbos.toByteArray(), charset) : new String(fbos.toByteArray());
putParameter(header.formFieldName, value);
} }
input.skipBytes(1); input.skipBytes(1);

View File

@ -171,7 +171,7 @@ public class MultipartRequestInputStream extends BufferedInputStream {
* @return 复制的字节数 * @return 复制的字节数
* @throws IOException 读取异常 * @throws IOException 读取异常
*/ */
public int copy(OutputStream out, int limit) throws IOException { public int copy(OutputStream out, long limit) throws IOException {
int count = 0; int count = 0;
while (true) { while (true) {
byte b = readByte(); byte b = readByte();

View File

@ -7,7 +7,6 @@ import cn.hutool.core.util.StrUtil;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -24,7 +23,7 @@ public class UploadFile {
private final UploadFileHeader header; private final UploadFileHeader header;
private final UploadSetting setting; private final UploadSetting setting;
private int size = -1; private long size = -1;
// 文件流小文件位于内存中 // 文件流小文件位于内存中
private byte[] data; private byte[] data;
@ -150,7 +149,7 @@ public class UploadFile {
/** /**
* @return 上传文件的大小&gt; 0 表示未上传 * @return 上传文件的大小&gt; 0 表示未上传
*/ */
public int size() { public long size() {
return size; return size;
} }
@ -200,13 +199,13 @@ public class UploadFile {
// 处理硬盘文件 // 处理硬盘文件
tempFile = FileUtil.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX, FileUtil.touch(setting.tmpUploadPath), false); tempFile = FileUtil.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX, FileUtil.touch(setting.tmpUploadPath), false);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile)); final BufferedOutputStream out = FileUtil.getOutputStream(this.tempFile);
if (data != null) { if (data != null) {
size = data.length; size = data.length;
out.write(data); out.write(data);
data = null; // not needed anymore data = null; // not needed anymore
} }
int maxFileSize = setting.maxFileSize; final long maxFileSize = setting.maxFileSize;
try { try {
if (maxFileSize == -1) { if (maxFileSize == -1) {
size += input.copy(out); size += input.copy(out);
@ -236,14 +235,14 @@ public class UploadFile {
* @return 是否为允许的扩展名 * @return 是否为允许的扩展名
*/ */
private boolean isAllowedExtension() { private boolean isAllowedExtension() {
String[] exts = setting.fileExts; final String[] exts = setting.fileExts;
boolean isAllow = setting.isAllowFileExts; boolean isAllow = setting.isAllowFileExts;
if (exts == null || exts.length == 0) { if (exts == null || exts.length == 0) {
// 如果给定扩展名列表为空当允许扩展名时全部允许否则全部禁止 // 如果给定扩展名列表为空当允许扩展名时全部允许否则全部禁止
return isAllow; return isAllow;
} }
String fileNameExt = FileUtil.extName(this.getFileName()); final String fileNameExt = FileUtil.extName(this.getFileName());
for (String fileExtension : setting.fileExts) { for (String fileExtension : setting.fileExts) {
if (fileNameExt.equalsIgnoreCase(fileExtension)) { if (fileNameExt.equalsIgnoreCase(fileExtension)) {
return isAllow; return isAllow;

View File

@ -31,7 +31,8 @@ public class UploadFileHeader {
// ---------------------------------------------------------------- public interface // ---------------------------------------------------------------- public interface
/** /**
* Returns <code>true</code> if uploaded data are correctly marked as a file. This is true if header contains string 'filename'. * Returns {@code true} if uploaded data are correctly marked as a file.<br>
* This is true if header contains string 'filename'.
* *
* @return 是否为文件 * @return 是否为文件
*/ */

View File

@ -9,7 +9,7 @@ package cn.hutool.core.net.multipart;
public class UploadSetting { public class UploadSetting {
/** 最大文件大小,默认无限制 */ /** 最大文件大小,默认无限制 */
protected int maxFileSize = -1; protected long maxFileSize = -1;
/** 文件保存到内存的边界 */ /** 文件保存到内存的边界 */
protected int memoryThreshold = 8192; protected int memoryThreshold = 8192;
/** 临时文件目录 */ /** 临时文件目录 */
@ -26,7 +26,7 @@ public class UploadSetting {
/** /**
* @return 获得最大文件大小-1表示无限制 * @return 获得最大文件大小-1表示无限制
*/ */
public int getMaxFileSize() { public long getMaxFileSize() {
return maxFileSize; return maxFileSize;
} }
@ -35,7 +35,7 @@ public class UploadSetting {
* *
* @param maxFileSize 最大文件大小 * @param maxFileSize 最大文件大小
*/ */
public void setMaxFileSize(int maxFileSize) { public void setMaxFileSize(long maxFileSize) {
this.maxFileSize = maxFileSize; this.maxFileSize = maxFileSize;
} }

View File

@ -83,6 +83,8 @@ public class IdcardUtil {
CITY_CODES.put("71", "台湾"); CITY_CODES.put("71", "台湾");
CITY_CODES.put("81", "香港"); CITY_CODES.put("81", "香港");
CITY_CODES.put("82", "澳门"); CITY_CODES.put("82", "澳门");
//issue#1277台湾身份证号码以83开头但是行政区划为71
CITY_CODES.put("83", "台湾");
CITY_CODES.put("91", "国外"); CITY_CODES.put("91", "国外");
TW_FIRST_CODE.put("A", 10); TW_FIRST_CODE.put("A", 10);
@ -354,7 +356,7 @@ public class IdcardUtil {
sum = sum + Integer.parseInt(String.valueOf(c)) * iflag; sum = sum + Integer.parseInt(String.valueOf(c)) * iflag;
iflag--; iflag--;
} }
if ("A".equals(end.toUpperCase())) { if ("A".equalsIgnoreCase(end)) {
sum += 10; sum += 10;
} else { } else {
sum += Integer.parseInt(end); sum += Integer.parseInt(end);

View File

@ -4,7 +4,6 @@ import cn.hutool.core.annotation.Alias;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.bean.copier.ValueProvider;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-cron</artifactId> <artifactId>hutool-cron</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-crypto</artifactId> <artifactId>hutool-crypto</artifactId>

View File

@ -626,7 +626,7 @@ public final class SecureUtil {
* 创建HMac对象调用digest方法可获得hmac值 * 创建HMac对象调用digest方法可获得hmac值
* *
* @param algorithm {@link HmacAlgorithm} * @param algorithm {@link HmacAlgorithm}
* @param key 密钥如果为<code>null</code>生成随机密钥 * @param key 密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.3.0 * @since 3.3.0
*/ */
@ -638,7 +638,7 @@ public final class SecureUtil {
* 创建HMac对象调用digest方法可获得hmac值 * 创建HMac对象调用digest方法可获得hmac值
* *
* @param algorithm {@link HmacAlgorithm} * @param algorithm {@link HmacAlgorithm}
* @param key 密钥如果为<code>null</code>生成随机密钥 * @param key 密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.0.3 * @since 3.0.3
*/ */
@ -650,7 +650,7 @@ public final class SecureUtil {
* 创建HMac对象调用digest方法可获得hmac值 * 创建HMac对象调用digest方法可获得hmac值
* *
* @param algorithm {@link HmacAlgorithm} * @param algorithm {@link HmacAlgorithm}
* @param key 密钥{@link SecretKey}如果为<code>null</code>生成随机密钥 * @param key 密钥{@link SecretKey}如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.0.3 * @since 3.0.3
*/ */
@ -664,7 +664,7 @@ public final class SecureUtil {
* HmacMD5加密hmacMd5(key).digest(data)<br> * HmacMD5加密hmacMd5(key).digest(data)<br>
* HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br> * HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br>
* *
* @param key 加密密钥如果为<code>null</code>生成随机密钥 * @param key 加密密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.3.0 * @since 3.3.0
*/ */
@ -678,7 +678,7 @@ public final class SecureUtil {
* HmacMD5加密hmacMd5(key).digest(data)<br> * HmacMD5加密hmacMd5(key).digest(data)<br>
* HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br> * HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br>
* *
* @param key 加密密钥如果为<code>null</code>生成随机密钥 * @param key 加密密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
*/ */
public static HMac hmacMd5(byte[] key) { public static HMac hmacMd5(byte[] key) {
@ -703,7 +703,7 @@ public final class SecureUtil {
* HmacSHA1加密hmacSha1(key).digest(data)<br> * HmacSHA1加密hmacSha1(key).digest(data)<br>
* HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br> * HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br>
* *
* @param key 加密密钥如果为<code>null</code>生成随机密钥 * @param key 加密密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.3.0 * @since 3.3.0
*/ */
@ -717,7 +717,7 @@ public final class SecureUtil {
* HmacSHA1加密hmacSha1(key).digest(data)<br> * HmacSHA1加密hmacSha1(key).digest(data)<br>
* HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br> * HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br>
* *
* @param key 加密密钥如果为<code>null</code>生成随机密钥 * @param key 加密密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
*/ */
public static HMac hmacSha1(byte[] key) { public static HMac hmacSha1(byte[] key) {

View File

@ -1,14 +1,5 @@
package cn.hutool.crypto.digest; package cn.hutool.crypto.digest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
@ -19,6 +10,15 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.CryptoException; import cn.hutool.crypto.CryptoException;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
/** /**
* 摘要算法<br> * 摘要算法<br>
* 注意此对象实例化后为非线程安全 * 注意此对象实例化后为非线程安全
@ -84,7 +84,7 @@ public class Digester implements Serializable {
* *
* @param algorithm 算法 * @param algorithm 算法
* @param provider 算法提供者null表示JDK默认可以引入Bouncy Castle等来提供更多算法支持 * @param provider 算法提供者null表示JDK默认可以引入Bouncy Castle等来提供更多算法支持
* @return {@link Digester} * @return Digester
* @throws CryptoException Cause by IOException * @throws CryptoException Cause by IOException
*/ */
public Digester init(String algorithm, Provider provider) { public Digester init(String algorithm, Provider provider) {

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-db</artifactId> <artifactId>hutool-db</artifactId>

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-dfa</artifactId> <artifactId>hutool-dfa</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-extra</artifactId> <artifactId>hutool-extra</artifactId>
@ -378,7 +378,7 @@
<dependency> <dependency>
<groupId>com.googlecode.aviator</groupId> <groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId> <artifactId>aviator</artifactId>
<version>5.1.4</version> <version>5.2.1</version>
<scope>compile</scope> <scope>compile</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-http</artifactId> <artifactId>hutool-http</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-json</artifactId> <artifactId>hutool-json</artifactId>

View File

@ -208,7 +208,7 @@ public class JSONArray implements JSON, JSONGetter<Integer>, List<Object>, Rando
} }
/** /**
* JSONArray转为以<code>separator</code>为分界符的字符串 * JSONArray转为以{@code separator}为分界符的字符串
* *
* @param separator 分界符 * @param separator 分界符
* @return a string. * @return a string.

View File

@ -1,6 +1,7 @@
package cn.hutool.json; package cn.hutool.json;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.ConvertException; import cn.hutool.core.convert.ConvertException;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
@ -33,6 +34,14 @@ public class JSONArrayTest {
new JSONArray(new JSONObject(), JSONConfig.create()); new JSONArray(new JSONObject(), JSONConfig.create());
} }
@Test
public void addNullTest(){
final List<String> aaa = ListUtil.of("aaa", null);
String jsonStr = JSONUtil.toJsonStr(JSONUtil.parse(aaa,
JSONConfig.create().setIgnoreNullValue(false)));
Assert.assertEquals("[\"aaa\",null]", jsonStr);
}
@Test @Test
public void addTest() { public void addTest() {
// 方法1 // 方法1
@ -96,7 +105,7 @@ public class JSONArrayTest {
List<Exam> list = array.toList(Exam.class); List<Exam> list = array.toList(Exam.class);
Assert.assertFalse(list.isEmpty()); Assert.assertFalse(list.isEmpty());
Assert.assertEquals(Exam.class, list.get(0).getClass()); Assert.assertSame(Exam.class, list.get(0).getClass());
} }
@Test @Test
@ -107,7 +116,7 @@ public class JSONArrayTest {
List<User> userList = JSONUtil.toList(array, User.class); List<User> userList = JSONUtil.toList(array, User.class);
Assert.assertFalse(userList.isEmpty()); Assert.assertFalse(userList.isEmpty());
Assert.assertEquals(User.class, userList.get(0).getClass()); Assert.assertSame(User.class, userList.get(0).getClass());
Assert.assertEquals(Integer.valueOf(111), userList.get(0).getId()); Assert.assertEquals(Integer.valueOf(111), userList.get(0).getId());
Assert.assertEquals(Integer.valueOf(112), userList.get(1).getId()); Assert.assertEquals(Integer.valueOf(112), userList.get(1).getId());
@ -125,7 +134,7 @@ public class JSONArrayTest {
List<Dict> list = JSONUtil.toList(array, Dict.class); List<Dict> list = JSONUtil.toList(array, Dict.class);
Assert.assertFalse(list.isEmpty()); Assert.assertFalse(list.isEmpty());
Assert.assertEquals(Dict.class, list.get(0).getClass()); Assert.assertSame(Dict.class, list.get(0).getClass());
Assert.assertEquals(Integer.valueOf(111), list.get(0).getInt("id")); Assert.assertEquals(Integer.valueOf(111), list.get(0).getInt("id"));
Assert.assertEquals(Integer.valueOf(112), list.get(1).getInt("id")); Assert.assertEquals(Integer.valueOf(112), list.get(1).getInt("id"));
@ -142,7 +151,7 @@ public class JSONArrayTest {
//noinspection SuspiciousToArrayCall //noinspection SuspiciousToArrayCall
Exam[] list = array.toArray(new Exam[0]); Exam[] list = array.toArray(new Exam[0]);
Assert.assertNotEquals(0, list.length); Assert.assertNotEquals(0, list.length);
Assert.assertEquals(Exam.class, list[0].getClass()); Assert.assertSame(Exam.class, list[0].getClass());
} }
/** /**

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-log</artifactId> <artifactId>hutool-log</artifactId>
@ -74,7 +74,7 @@
<dependency> <dependency>
<groupId>org.tinylog</groupId> <groupId>org.tinylog</groupId>
<artifactId>tinylog-api</artifactId> <artifactId>tinylog-api</artifactId>
<version>2.1.2</version> <version>2.2.0</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -8,7 +8,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-poi</artifactId> <artifactId>hutool-poi</artifactId>

View File

@ -8,7 +8,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-script</artifactId> <artifactId>hutool-script</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-setting</artifactId> <artifactId>hutool-setting</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-socket</artifactId> <artifactId>hutool-socket</artifactId>

View File

@ -9,7 +9,7 @@
<parent> <parent>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
</parent> </parent>
<artifactId>hutool-system</artifactId> <artifactId>hutool-system</artifactId>
@ -26,7 +26,7 @@
<dependency> <dependency>
<groupId>com.github.oshi</groupId> <groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId> <artifactId>oshi-core</artifactId>
<version>5.3.5</version> <version>5.3.6</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -8,7 +8,7 @@
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId> <artifactId>hutool-parent</artifactId>
<version>5.5.2-SNAPSHOT</version> <version>5.5.3-SNAPSHOT</version>
<name>hutool</name> <name>hutool</name>
<description>Hutool是一个小而全的Java工具类库通过静态方法封装降低相关API的学习成本提高工作效率使Java拥有函数式语言般的优雅让Java语言也可以“甜甜的”。</description> <description>Hutool是一个小而全的Java工具类库通过静态方法封装降低相关API的学习成本提高工作效率使Java拥有函数式语言般的优雅让Java语言也可以“甜甜的”。</description>
<url>https://github.com/looly/hutool</url> <url>https://github.com/looly/hutool</url>