实现树形结构(TreeNode)

189 阅读1分钟

前端展示html image.png

完整资料: 链接:pan.baidu.com/s/1xvCUKHr8… 提取码:caac

认识数据json

[
    {
        "id": 1,
        "name": "Category 1",
        "parentid": 0,
        "children": [
            {
                "id": 2,
                "name": "Sub-category 1-1",
                "parentid": 1,
                "children": []
            },
            {
                "id": 3,
                "name": "Sub-category 1-2",
                "parentid": 1,
                "children": []
            }
        ]
    },
    {
        "id": 4,
        "name": "Category 2",
        "parentid": 0,
        "children": [
            {
                "id": 5,
                "name": "Sub-category 2-1",
                "parentid": 4,
                "children": []
            }
        ]
    }
]

后端实现java
1、数据domain

@TableName(value ="resource_categories")
@Data
public class ResourceCategories implements Serializable {
    private Integer id;

    private Integer parentid;

    private String name;

    private static final long serialVersionUID = 1L;
}
    

2、构建树结构dto

@Data
public class CategoryTreeNode {
    private Integer id;
    private String name;
    private Integer parentid;

    private List<CategoryTreeNode> children;

    // 将查询结果组织成树形结构
    public static CategoryTreeNode buildTree(List<ResourceCategories> categories, Integer parentId) {
        CategoryTreeNode parentNode = new CategoryTreeNode();
        parentNode.setChildren(new ArrayList<>());
        for (ResourceCategories category : categories) {
            if (category.getParentid().equals(parentId)) {
                CategoryTreeNode childNode = new CategoryTreeNode();
                childNode.setId(category.getId());
                childNode.setName(category.getName());
                childNode.setParentid(category.getParentid());
                childNode.setChildren(buildTree(categories, category.getId()).getChildren());
                parentNode.getChildren().add(childNode);
            }
        }
        return parentNode;
    }
}

3、controller类

@RestController
@RequestMapping("/treenode")
public class TreeController {

    @Autowired
    private ResourceCategoriesService resourceCategoriesService;

    @GetMapping
    public List<ResourceCategories> ListTree(){
        List<ResourceCategories> list = resourceCategoriesService.list();
        return list;
    }


    @GetMapping("/tree")
    @ResponseBody
    @CrossOrigin
    public String buildAndTraverseTree() throws JsonProcessingException {
        // 模拟数据库查询结果
        List<ResourceCategories> categories = resourceCategoriesService.list();

        // 构建树形结构
        CategoryTreeNode rootNode = CategoryTreeNode.buildTree(categories, 0);
        // 将树形结构转换为 JSON 格式
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(rootNode.getChildren());
        return json;
    }

}

作者:weiweitest