fastjson使用遇到问题汇总

问题一

有个很简单的需求,就是把一个数据结构转成String,然后再把这个String转成数据结构。结果在转数据结构的时候,就崩溃了。郁闷,String特别长,感觉无从下手,排查了四个小时才发现问题。

在数据结构中,有如下的代码:

    private IosSign ios_sign;

    public void setIos_sign(IosSign ios_sign) {
    
    
        this.ios_sign = ios_sign;
    }

    public boolean isIos_Sign() {
    
    
        if (ios_sign == null) {
    
    
            return false;
        }
        return ios_sign.isIos_sign();
    }

通过fastjson把数据结构转化成String的时候,ios_sign字段被解析成了布尔类型。这样的话,再把String转成数据结构类型就不对了。

不太清楚fastjson的原理,估计它是根据getXXX、isXXX返回的类型来决定字段类型的,而且我发现,如果有isXXX的方法,它会认为会有XXX的字段,这个需要格外注意!!!

如果不存在String和数据结构互转的需求,上述代码是没有问题的。

为了解决这个问题,修改如下:

    private IosSign ios_sign;

    public void setIos_sign(IosSign ios_sign) {
    
    
        this.ios_sign = ios_sign;
    }

    public IosSign getIos_sign() {
    
    
        return ios_sign;
    }

    public boolean beIosSign() {
    
    
        if (ios_sign == null) {
    
    
            return false;
        }
        return ios_sign.isIos_sign();
    }

2023年5月8日又遇到了这个问题

		private String showOriginalPrice; // 1 展示原价 -1不展示原价
		
        public boolean isShowOriginalPrice() {
    
    
            if (StringUtils.isNotBlank(showOriginalPrice)) {
    
    
                return showOriginalPrice.equals("1");
            }
            return false;
        }

        public void setShowOriginalPrice(String showOriginalPrice) {
    
    
            this.showOriginalPrice = showOriginalPrice;
        }

这次遇到的问题是,在转成String的时候,showOriginalPrice虽然没有被解析成boolean类型,当时,值却变成了“true”,导致String再转成数据结构后值不对了。

猜你喜欢

转载自blog.csdn.net/lizhongyisailang/article/details/127015174