fastjson版本:1.2.72,更新到1.2.76也没有修复问题。
问题:转换为JSON数据后,长整形数字两边没有添加上双引号。
源码错误位置:跟了一下源码,发现为 ListSerializer
和 CollectionCodec
没有对Long数据进行序列化方式重新获取,而是直接将long值write了。
请修复该问题。
导致了接口返回数据到前端时,前端接收数据后长数字精度丢失
的问题。
fastjson版本:1.2.72,更新到1.2.76也没有修复问题。
问题:转换为JSON数据后,长整形数字两边没有添加上双引号。
源码错误位置:跟了一下源码,发现为 ListSerializer
和 CollectionCodec
没有对Long数据进行序列化方式重新获取,而是直接将long值write了。
请修复该问题。
导致了接口返回数据到前端时,前端接收数据后长数字精度丢失
的问题。
能给一个测试样例吗? @wangliang181230
能给一个测试样例吗? @wangliang181230
@Tloops
public static void main(String[] args) {
SerializeConfig.getGlobalInstance().put(Long.class, ToStringSerializer.instance);
SerializeConfig.getGlobalInstance().put(long.class, ToStringSerializer.instance);
// Long
System.out.println("Long");
System.out.println(JSON.toJSONString(Long.MAX_VALUE)); // 输出结果:"9223372036854775807" ,含双引号,正确的
System.out.println(JSON.toJSONString(Long.MIN_VALUE)); // 输出结果:"-9223372036854775807" ,含双引号,正确的
// Long[]
Long[] longArr = new Long[2];
longArr[0] = Long.MAX_VALUE;
longArr[1] = Long.MIN_VALUE;
System.out.println("\r\nLong[]");
System.out.println(JSON.toJSONString(longArr)); // 输出结果:["9223372036854775807","-9223372036854775808"] ,含双引号,正确的
// 以下情况为错误的情况
// long[]
long[] longArr2 = new long[2];
longArr2[0] = Long.MAX_VALUE;
longArr2[1] = Long.MIN_VALUE;
System.out.println("\r\nlong[]");
System.out.println(JSON.toJSONString(longArr2)); // 输出结果:[9223372036854775807,-9223372036854775808] ,不含双引号,错误的
Collection<Long> coll;
// ArrayList<Long>
coll = new ArrayList<>();
coll.add(Long.MAX_VALUE);
coll.add(Long.MIN_VALUE);
System.out.println("\r\nArrayList<Long>");
System.out.println(JSON.toJSONString(coll)); // 输出结果:[9223372036854775807,-9223372036854775808] ,不含双引号,错误的
// LinkedList<Long>
coll = new LinkedList<>();
coll.add(Long.MAX_VALUE);
System.out.println("\r\nLinkedList<Long>");
System.out.println(JSON.toJSONString(coll)); // 输出结果:[9223372036854775807] ,不含双引号,错误的
// HashSet<Long>
coll = new HashSet<>();
coll.add(Long.MAX_VALUE);
coll.add(Long.MIN_VALUE);
System.out.println("\r\nHashSet<Long>");
System.out.println(JSON.toJSONString(coll)); // 输出结果:[9223372036854775807,-9223372036854775808] ,不含双引号,错误的
// LinkedHashSet<Long>
coll = new LinkedHashSet<>();
coll.add(Long.MAX_VALUE);
System.out.println("\r\nLinkedHashSet<Long>");
System.out.println(JSON.toJSONString(coll)); // 输出结果:[9223372036854775807] ,不含双引号,错误的
}
刚测了一下,其他类型的List
ListSerializer.java的错误代码段:
CollectionCodec.java的错误代码段:
@wangliang181230 已复现,谢谢。我现在帮忙修一下
@Tloops ,好的,麻烦了。
@Tloops ,你好,long[]
的情况,也是错误的。
PrimitiveArraySerializer.java的错误代码段:
@wangliang181230 好的谢谢,已复现问题。现在帮忙修
@wenshao 发现其他的诸如int[]
,Collection<Integer>
的实现好像也是写死的,无法自定义序列化方式,不知道这是不是fastjson希望的效果
请问,这个问题有没有后续啊?
等作者回复吧,看commit历史作者已经两个月没有维护这个项目了……没有办法……
哦,no。。。