反序列化时缺少默认构造函数导致的问题

定位这个问题差不多花了我半个小时,所以有必要将其记录下来,我在开发我的工具包,代码如下:

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

@Data
public class TableRoot {
    private String tblName;
    private String tblDesc;
    private List<ColumnRoot> columns;

    public TableRoot(String tblName, String tblDesc) {
        this.tblName = tblName;
        this.tblDesc = tblDesc;
        this.columns = new ArrayList<>();
    }

    @Data
    @SuppressWarnings("WeakerAccess")
    public static class ColumnRoot {
        private String colName;
        private String colDesc;
        @JSONField(deserializeUsing = JavaTypeCodec.class, serializeUsing = JavaTypeCodec.class)
        private JavaType javaType;
    }
}


我在反序列化json文件时,返现columns的值始终为空,而tblName和tblDesc的值正常,这种情况以往从未发生过。后来我发现是因为我TableRoot缺少默认的构造函数,这个还是蛮坑的。

如果去分析fastjson的源码,我可以肯定我能清晰的知道背后的原因,但是现在实在是没有必要这么去做,哈哈。