Skip to content

2.0.5版本,双向链表向Json序列化可用,但是序列化产生的数据反序列化节点存在问题 #378

@javalipf

Description

@javalipf
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApproveConfigJson implements Serializable {
    private String postId;

    private boolean hasPreNode = false;

    private ApproveConfigJson preNode;

    private boolean hasNextNode = false;

    private ApproveConfigJson nextNode;

    private int sort;

    public ApproveConfigJson(String postId, int sort) {
        this.postId = postId;
        this.sort = sort;
    }
}
public static void main(String[] args) {
        List<ApproveConfigJson> approveConfigJsons = new ArrayList<>();
        approveConfigJsons.add(new ApproveConfigJson("1",1));
        approveConfigJsons.add(new ApproveConfigJson("2",2));
        approveConfigJsons.add(new ApproveConfigJson("3",3));
        String s = list2LinkedJson2(approveConfigJsons);
        ApproveConfigJson approveConfigJson = JSON.parseObject(s, ApproveConfigJson.class);
        System.err.println(approveConfigJson.getNextNode().getPreNode().getPostId());
    }

    public static String list2LinkedJson2(List<ApproveConfigJson> approveConfigJsons) {
        approveConfigJsons = approveConfigJsons.stream().sorted(Comparator.comparing(ApproveConfigJson::getSort)).collect(Collectors.toList());
        ApproveConfigJson approveUtil = null;
        Iterator<ApproveConfigJson> iterator = approveConfigJsons.iterator();
        ApproveConfigJson local = new ApproveConfigJson();
        while (iterator.hasNext()) {
            ApproveConfigJson next = iterator.next();
            if (approveUtil == null) {
                approveUtil = next;
                local = next;
            } else {
                approveUtil.setHasNextNode(true);
                approveUtil.setNextNode(next);
                next.setHasPreNode(true);
                next.setPreNode(local);
                local = next;
                approveUtil = approveUtil.getNextNode();
                approveUtil.setNextNode(null);
            }
        }

        ApproveConfigJson finalNode = approveUtil;
        while (finalNode.isHasPreNode()) {
            finalNode = finalNode.getPreNode();
        }
        return JSON.toJSONString(finalNode);
    }

按照sort排序,链表首节点为postId = 1,序列化的json串正常,但是反序列化后链表的首节点为postId = 2,且获取下级节点后再获取上级节点会出现java.lang.NullPointerException
在 ApproveConfigJson approveConfigJson = JSON.parseObject(s, ApproveConfigJson.class);方法中

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions