[alibaba/fastjson]自定义Exception的class作为其他类成员时候反序列化属性丢失

2025-11-11 245 views
5
public class Aa extends Exception {

    public Aa(){
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class C {

    private Exception e;

    public Exception getE() {
        return e;
    }

    public void setE(Exception e) {
        this.e = e;
    }

}
        Aa aa = new Aa();
        aa.setName("aa");
        C c = new C();
        c.setE(aa);
        String jsonC = JSON.toJSONString(c, SerializerFeature.WriteClassName);

        C c2 = JSON.parseObject(jsonC, C.class);
        System.out.println(c2.getE().getClass().getSimpleName());
        System.out.println(((Aa)c2.getE()).getName());

结果为 Aa null

回答

8

1.2.38 版本

1

exception的处理机制跟其他类型不同,我看看能否处理。

3

找到问题了,反序列化时是拿的private Exception e的类型信息,里面没有name字段。

1

试了一下,如果把Exception换成Object,parser直接报错,提示不支持auto type。 可以通过显示启用auto type解决: static { System.setProperty("fastjson.parser.autoTypeSupport","true"); }