Fastjson升级到1.2.79问题定位

问题已经定位了,其实就是我自己编写的一个针对LocalDataTime序列化器没有针对null进行处理,而1.2.79会将Null传递给该序列化器,所以最终导致报错。但是报错比较隐晦,而且和出问题的点相差很远,所以定位花了很长时间。

不过这些定位问题时发现了一个非常棒的断点位,可以很方便下次出问题时定位问题。JavaBeanSerializer的如下位置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

protected void write(JSONSerializer serializer, //
                    Object object, //
                    Object fieldName, //
                    Type fieldType, //
                    int features,
                    boolean unwrapped
) throws IOException { 
    // ...
    
    for (int i = 0; i < getters.length; ++i) {
        FieldSerializer fieldSerializer = getters[i];

        Field field = fieldSerializer.fieldInfo.field;
        FieldInfo fieldInfo = fieldSerializer.fieldInfo;
        // 在这块进行条件断点,非常舒服
        String fieldInfoName = fieldInfo.name;
        Class<?> fieldClass = fieldInfo.fieldClass;
        
        // ...
    
    }
    
    // ...
}

该循环会循环处理每个字段,如果字段是一个对象的话,还会进行递归处理,所以基本上可以看到每个字段是如何被处理的。