Alibaba FastJSON 反序列化json时字段值未成功赋值

FastJson 是一个将对象序列化为json字符串和将字符串反序列化为对象的一个工具,但是在反序列化解析时,可能会出现字段值丢失的问题,笔者在手撸rpc框架的时候,对于客户端传过来的json字符串总是有一个字段值解析为null,在客户端解析却又是正常的,花费了很多时间去找这个bug,通过解析JsonparseObject的源码,发现最终实现解析的关键代码在于、

 public static <T> T parseObject(String input, Type clazz, ParserConfig config, ParseProcess processor,
                                          int featureValues, Feature... features) {
        if (input == null || input.length() == 0) {
            return null;
        }

        if (features != null) {
            for (Feature feature : features) {
                featureValues |= feature.mask;
            }
        }

        DefaultJSONParser parser = new DefaultJSONParser(input, config, featureValues);

        if (processor != null) {
            if (processor instanceof ExtraTypeProvider) {
                parser.getExtraTypeProviders().add((ExtraTypeProvider) processor);
            }

            if (processor instanceof ExtraProcessor) {
                parser.getExtraProcessors().add((ExtraProcessor) processor);
            }

            if (processor instanceof FieldTypeResolver) {
                parser.setFieldTypeResolver((FieldTypeResolver) processor);
            }
        }

        T value = (T) parser.parseObject(clazz, null); 这里是最终parse的关键

        parser.handleResovleTask(value);

        parser.close();

        return (T) value;
    }

总而言之,FastJSON 在解析对象时,是通过对象的构造函数来组装对象的,而我的问题就在于一个字段的构造函数的入参名称与类的属性名称不一样,所以会导致参数传入失败,只需要更改名字就行了。

posted @ 2023-06-08 21:01  B站读研  阅读(330)  评论(0)    收藏  举报