alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Apache License 2.0
3.82k stars 499 forks source link

[BUG]AutoType long类型解析成Integer #2608

Closed zhxing closed 6 months ago

zhxing commented 6 months ago

问题描述

简要描述您碰到的问题。 AutoType long类型解析成Integer,请看代码

环境信息

请填写以下信息:

重现步骤

如何操作可以重现该问题: 执行代码

    @Test
    public void testLong() {
        String str = "[300000000L]";
        List list = JSONObject.parseObject(str, List.class, Feature.SupportAutoType);
        System.out.println(list.get(0).getClass());//print class java.lang.Integer
        Assert.assertTrue(list.get(0).getClass() == Long.class);
    }

期待的正确结果

正确解析成long类型

相关日志输出

print class java.lang.Integer java.lang.AssertionError

附加信息

建议修改的地方:com.alibaba.fastjson2.JSONReaderUTF16 的4038行

        if (ch == 'L' || ch == 'F' || ch == 'D' || ch == 'B' || ch == 'S') {
            if (!intOverflow) {//这里改成 if (!intOverflow||ch == 'L' ) ,long类型不存在溢出的问题
                switch (ch) {
                    case 'B':
                        valueType = JSON_TYPE_INT8;
                        break;
                    case 'S':
wenshao commented 6 months ago

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.51-SNAPSHOT/ 问题已修复,请帮忙用2.0.51-SNAPSHOT版本验证

wenshao commented 6 months ago

https://github.com/alibaba/fastjson2/releases/tag/2.0.51 问题已修复,请用新版本