fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG]AutoType long类型解析成Integer

Open zhxing opened this issue 3 months ago • 1 comments

问题描述

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

环境信息

请填写以下信息:

  • OS信息: [e.g.:windows ]
  • JDK信息: [e.g.:Openjdk 1.8.0_221]
  • 版本信息:[e.g.:Fastjson2 2.0.49]

重现步骤

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

    @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':

zhxing avatar May 21 '24 11:05 zhxing