JSONConfig增加setWriteLongAsString可选是否将Long写出为String类型

This commit is contained in:
Looly 2024-04-11 21:45:12 +08:00
parent 5fa835d702
commit 8e91ef2938
4 changed files with 55 additions and 1 deletions

View File

@ -9,6 +9,7 @@
* 【core 】 StrUtil增加toStringOrEmpty方法issue#I9CPC7@Gitee
* 【extra 】 设置jsch登录认证方式跳过Kerberos身份验证pr#3530@Github
* 【extra 】 增加设置验证码大小和针对alias注释pr#3533@Github
* 【json 】 JSONConfig增加setWriteLongAsString可选是否将Long写出为String类型issue#3541@Github
### 🐞Bug修复
* 【http 】 修复HttpUtil.urlWithFormUrlEncoded方法重复编码问题issue#3536@Github

View File

@ -49,6 +49,12 @@ public class JSONConfig implements Serializable {
*/
private boolean checkDuplicate;
/**
* 是否将Long值写出为字符串类型
* @since 5.8.28
*/
private boolean writeLongAsString;
/**
* 创建默认的配置项
*
@ -262,4 +268,23 @@ public class JSONConfig implements Serializable {
this.checkDuplicate = checkDuplicate;
return this;
}
/**
* 是否将Long值写出为字符串类型
* @return 是否将Long值写出为字符串类型
* @since 5.8.28
*/
public boolean isWriteLongAsString() {
return writeLongAsString;
}
/**
* 设置是否将Long值写出为字符串类型
* @param writeLongAsString 是否将Long值写出为字符串类型
* @return this
*/
public JSONConfig setWriteLongAsString(boolean writeLongAsString) {
this.writeLongAsString = writeLongAsString;
return this;
}
}

View File

@ -261,7 +261,13 @@ public class JSONWriter extends Writer {
} else if (value instanceof Iterable || value instanceof Iterator || ArrayUtil.isArray(value)) {
new JSONArray(value).write(writer, indentFactor, indent);
} else if (value instanceof Number) {
writeNumberValue((Number) value);
if(value instanceof Long && config.isWriteLongAsString()){
// issue#3541
// long可能溢出此时可选是否将long写出为字符串类型
writeStrValue(value.toString());
} else {
writeNumberValue((Number) value);
}
} else if (value instanceof Date || value instanceof Calendar || value instanceof TemporalAccessor) {
// issue#2572@Github
if(value instanceof MonthDay){

View File

@ -0,0 +1,22 @@
package cn.hutool.json;
import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
public class Issue3541Test {
@Test
public void longToStringTest() {
Demo demo = new Demo();
demo.setId(1227690722069581409L);
demo.setName("hutool");
String jsonStr = JSONUtil.toJsonStr(demo, JSONConfig.create().setWriteLongAsString(true));
Assert.assertEquals("{\"id\":\"1227690722069581409\",\"name\":\"hutool\"}", jsonStr);
}
@Data
public static class Demo {
private Long id;
private String name;
}
}