fastjson 反序列化子类集成父类, 父类中的字段是存在泛型,JavaBeanInfo读取方法时, 使用父类的set方法,导致序列化失败,

pinkon5k  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(640)

FastJson 1.2.57 ~ 1.2.62版本 存在此问题

public class TreeNode<T extends TreeResource, R extends TreeNode> implements Serializable {

private T data;

private List<R> childNodes;

public List<R> getChildNodes() {
    return childNodes;
}

public void setChildNodes(List<R> childNodes) {
    this.childNodes = childNodes;
}
public T getData() {
    return data;
}

public void setData(T data) {
    this.data = data;
}

}

public class ChildTreeNodeDto extends TreeNode<GoodsClassifyDto, ChildTreeNodeDto> implements Serializable {

@Override
public GoodsClassifyDto getData() {
    return super.getData();
}

@Override
public void setData(GoodsClassifyDto data) {
    super.setData(data);
}

@Override
public List<GoodsClassifyTreeDto> getChildNodes() {
    return super.getChildNodes();
}

@Override
public void setChildNodes(List<GoodsClassifyTreeDto> childNodes) {
    super.setChildNodes(childNodes);
}

}

以上为反序列化的父类和子类。
扒了源码, 看到JavaBeanInfo是得到clazz.getMethods(); 进行处理,所以会存在两个一样的method,导致使用了父类的, 最终反序列化是吧。 这里应该对相同的名称的method进行一遍过滤吧,把父类的进行过滤掉, 才不会出现问题。

k2arahey

k2arahey1#

你可以尝试提交一个fix的pr

uujelgoq

uujelgoq2#

你好,你可以提供一个可重现你描述的bug的最小demo吗?我有点没太明白你反馈的bug @lockielyKIM

相关问题