【发布时间】:2020-12-23 19:41:24
【问题描述】:
同事们!我们正在开发一个 Web 应用程序,该应用程序具有表示当前组织(例如银行)的组织结构的功能。组织结构表示为父子关系,其中每个节点只有一个父节点,每个父节点可能有零个或多个子节点。当实体(orgUnits)的数量比较少时,大约 500 个实体,我们的旧方法运行良好。通常,我们使用递归来获取所有父子实体,并将其作为 JSON 文档传递给浏览器,前端部分会解析该文档并将其呈现给用户。当我们上传另一个组织(另一家银行)的组织结构并且有 6000 个活跃的 orgUnits 时,问题就开始了。显然,获取所有 orgUnits 不是一种选择。我们开始使用请求参数 depth 来控制递归级别,但它并没有解决获取子实体的问题,因为每个父级可以有一个或多个子级。例如,我们有一个父 orgUnit,它有 100 个孩子,并且这个孩子中的任何一个都可以有一个或多个孩子。即使没有必要,此方法也会加载此级别的所有 orgUnit。现在,我正在寻找能够使每个 HTTP 请求的 orgUnit 数量保持相对较小并且浏览器在呈现时不会冻结的解决方案。我的想法很简单:
- 以某种方式对结果进行分页;
- 仅在用户需要时返回额外的子 orgUnit;
我们的 OrgUnitDTO 如下所示:
{
"id": "a4f51de5-36f3-258c-232d-3d617c07fefc",
"extId": null,
"type": "OrgUnit",
"orgId": "99beadc8-831a-f6ab-fee9-11143d43ccd1",
"parentId": "99beadc8-831a-f6ab-fee9-11143d43ccd1",
"code": "second-level-test-department",
"name": "name",
"note": "note",
"manager": null,
"children": [], // children property has objects of the same type
"createdBy": "userName",
"updatedBy": "userName",
"createdAt": "2020-09-04T06:23:53.793Z",
"updatedAt": "2020-09-04T06:23:53.795Z",
"sortOrder": 0,
"isManager": false
}
这就是它在 GUI 中的样子: screenshot
我也在寻找您对后端和前端的建议!
如果重要,我们使用 Spring-Boot 和 Hibernate。
【问题讨论】:
标签: json spring spring-boot rest web