[alibaba/fastjson]fastjson对象属性值相似的bug

2025-11-03 823 views
5

@Data public class OrderInfoVO implements Serializable { private static final long serialVersionUID = 1L; /**

订单id */ private int orderId; /** 项目状态 */ private int status; /** 订单状态 */ private int orderStatus; private int oldStatus; private int oldOrderStatus; } 对象的 属性名称相似,导致新旧属性值一样,当然这种情况是偶然发生的,发生的概率比较小,盼早日修复. eg: orderStatus=2, oldOrderStatus=3; 该对象执行JSONObject.toJSONString(orderInfoVO)时,出现上述情况。

回答

4

我测试过没问题,测试代码如下:

public class Issue1933 extends TestCase {
    public void test_for_issue() throws Exception {
        OrderInfoVO v0 = JSON.parseObject("{\"orderStatus\":1}", OrderInfoVO.class);
        assertEquals(1, v0.orderStatus);
        assertEquals(0, v0.oldStatus);
        assertEquals(0, v0.oldOrderStatus);
    }

    public void test_for_issue_1() throws Exception {
        OrderInfoVO v0 = JSON.parseObject("{\"oldStatus\":1}", OrderInfoVO.class);
        assertEquals(0, v0.orderStatus);
        assertEquals(1, v0.oldStatus);
        assertEquals(0, v0.oldOrderStatus);
    }

    public void test_for_issue_2() throws Exception {
        OrderInfoVO v0 = JSON.parseObject("{\"oldOrderStatus\":1}", OrderInfoVO.class);
        assertEquals(0, v0.orderStatus);
        assertEquals(0, v0.oldStatus);
        assertEquals(1, v0.oldOrderStatus);
    }

    public static class OrderInfoVO {
        private int orderStatus;
        private int oldStatus;
        private int oldOrderStatus;

        public int getOrderStatus() {
            return orderStatus;
        }

        public void setOrderStatus(int orderStatus) {
            this.orderStatus = orderStatus;
        }

        public int getOldStatus() {
            return oldStatus;
        }

        public void setOldStatus(int oldStatus) {
            this.oldStatus = oldStatus;
        }

        public int getOldOrderStatus() {
            return oldOrderStatus;
        }

        public void setOldOrderStatus(int oldOrderStatus) {
            this.oldOrderStatus = oldOrderStatus;
        }
    }
}
1

这是有概率的,大多数情况下是没有问题,但是我这边已经出现了两三次了,但是有可能这个方法之前调用了好几千次是没有问题的

3

我是拿到线上日志看到的,同样的接口,同样的数据,前一秒是不合适的,后一秒再请求就正常了,这是是使用的版本:1.2.22和1.1.31两个版本,转换为gson就不会有这样的问题. 这是我看到的一篇博客,https://blog.csdn.net/yangstarss/article/details/80705863,情况和我类似,初步判断是序列化问题,具体没有进行测试

9

序列化时发生的,还是反序列化发生的?

3

具体没怎么去看,因为最近比较忙,没有太多的经历在这个上面,我得出的结论在序列化过程中,但是具体哪个阶段没有关注