You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.9 KiB

07 — SystemController 出入参规范化

What to build: 新建 DeptDTO(继承 BaseDTO,含 children 树结构,加 fromEntity/toEntity),新建 AssignDeptDTO(纯 POJO 不继承 BaseDTO,无主键语义)。menuTree 出参从 List<SysMenu>(实体直出)改为 List<ResourceNodeDTO>。deptTree 出参从 List<SysDept>(实体直出)改为 List<DeptDTO>。saveDept(5 参数)从 @RequestParam 改为 DeptDTO 入参。assignUserDepts(3 参数)从 @RequestParam 改为 AssignDeptDTO 入参。userPage 去掉 @RequestBody 改表单绑定(前端破坏性变更——前端从 JSON body 改为 form-urlencoded)。UserStatsVO 改名为 UserStatsDTO。assignUserRoles(2 参数)、deleteDept(1 参数)保持 @RequestParam

Blocked by: 01 (BaseDTO 重构), 02 (InitBinder), 05 (ResourceNodeDTO — menuTree 要用它)

Status: resolved

  • 新建 DeptDTO(继承 BaseDTO,含 children 字段,fromEntity(SysDept) + toEntity()),放 crm-auth/domain/dto/
  • 新建 AssignDeptDTO(纯 POJO,字段 userId/primaryDeptId/deptIds),放 crm-auth/domain/dto/
  • UserStatsVO 改名为 UserStatsDTO(不继承 BaseDTO,无主键语义)
  • SystemController.menuTree 出参从 List<SysMenu> 改为 List<ResourceNodeDTO>
  • SystemController.deptTree 出参从 List<SysDept> 改为 List<DeptDTO>
  • SystemController.saveDept 从 5 个 @RequestParam 改为 DeptDTO 入参
  • SystemController.assignUserDepts 从 3 个 @RequestParam 改为 AssignDeptDTO 入参
  • SystemController.userPage 去掉 @RequestBody,改为隐式表单绑定(对齐已文档化的“全部表单字段”约定)
  • SystemController.userStats 出参类型从 UserStatsVO 改为 UserStatsDTO
  • assignUserRoles(2 参数)、deleteDept(1 参数)保持 @RequestParam 不变
  • PermissionResolver.visibleMenuTree 返回类型从 List<SysMenu> 改为 List<ResourceNodeDTO>(impl 内 Entity→DTO 转换后建树)
  • SystemController 不再 import SysMenu/SysDept 实体
  • 测试:menuTree/deptTree 返回的 JSON 中不包含 deleted/creatorId/updaterId(DTO 继承 BaseDTO,不带审计字段;DataScopeIntegrationTest.visibleMenuTree 验证 DTO 树)
  • 测试:saveDept 入参为 DeptDTO,提交 createTime 被 strip(GlobalDataBindingAdviceTest 覆盖 strip 行为;DeptDTO.toEntity 不映射审计字段)
  • 测试:assignUserDepts 入参为 AssignDeptDTO(表单绑定;现有 UserListIntegrationTest 维绿)
  • 测试:userPage 表单绑定生效(UserPageParam 无 @RequestBody,由 Spring 表单绑定)
  • 前端对接文档:userPage 本就应走 form-urlencoded(说明书已写“全部表单字段,不使用 JSON body”),代码回归约定无需新增文档;同步将 role 文档 RoleDetailVO→RoleDTO