# 06 — RoleController 出入参规范化 **What to build:** RoleDetailVO 改名为 RoleDTO(继承 BaseDTO,加 `fromEntity`/`toEntity`)。新建 RoleParam extends BaseParam,RoleController.page 改用它并经 PageConverter 转换——修复分页绕过(当前自行 `new Page<>` 无页大小上限、排序字段可注入)。page 出参从 `PageResult`(实体直出)改为 `PageResult`——`deleted`/`creatorId` 不再泄露。saveOrUpdate 从 6 个 `@RequestParam` 改为 RoleDTO 入参(≥3 阈值触发封装)。assignResources(2 参数)和 delete(1 参数)保持 `@RequestParam`。 **Blocked by:** 01 (BaseDTO 重构), 02 (InitBinder) **Status:** ready-for-agent - [ ] `RoleDetailVO` 改名为 `RoleDTO`,继承 `BaseDTO`,加 `@EqualsAndHashCode(callSuper = true)` - [ ] `RoleDTO` 上实现 `fromEntity(SysRole)` 静态方法和 `toEntity()` 实例方法 - [ ] 新建 `RoleParam extends BaseParam`,放 `param/` 包,含 `keyword` 等角色查询字段 - [ ] `RoleController.page` 入参从 3 个 `@RequestParam` 改为 `RoleParam`,经 `PageConverter.toMpPage` 转换 - [ ] `RoleController.page` 出参从 `PageResult` 改为 `PageResult` - [ ] `RoleController.saveOrUpdate` 从 6 个 `@RequestParam` 改为 `RoleDTO` 入参 - [ ] `RoleController.detail` 出参从 `RoleDetailVO` 改为 `RoleDTO` - [ ] `RoleController.assignResources`(2 参数)保持 `@RequestParam` - [ ] `RoleController.delete`(1 参数)保持 `@RequestParam` - [ ] RoleController 不再 import `SysRole` 实体 - [ ] 测试:page 返回的 JSON 中不包含 `deleted`/`creatorId`/`updaterId` - [ ] 测试:page 经 PageConverter,页大小超过上限被收敛 - [ ] 测试:saveOrUpdate 入参为 RoleDTO,提交 `createTime` 被 strip - [ ] 测试:assignResources 保持 @RequestParam 不变