# 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:** resolved - [x] `RoleDetailVO` 改名为 `RoleDTO`,继承 `BaseDTO`,加 `@EqualsAndHashCode(callSuper = true)` - [x] `RoleDTO` 上实现 `fromEntity(SysRole)` 静态方法和 `toEntity()` 实例方法 - [x] 新建 `RoleParam extends BaseParam`,放 `param/` 包,keyword 等角色查询字段(keyword 继承自 BaseParam) - [x] `RoleController.page` 入参从 3 个 `@RequestParam` 改为 `RoleParam`,经 `PageConverter.toMpPage` 转换(下沉到 `pageRoles`) - [x] `RoleController.page` 出参从 `PageResult` 改为 `PageResult` - [x] `RoleController.saveOrUpdate` 从 6 个 `@RequestParam` 改为 `RoleDTO` 入参 - [x] `RoleController.detail` 出参从 `RoleDetailVO` 改为 `RoleDTO` - [x] `RoleController.assignResources`(2 参数)保持 `@RequestParam` - [x] `RoleController.delete`(1 参数)保持 `@RequestParam` - [x] RoleController 不再 import `SysRole` 实体 - [x] 测试:page 返回的 JSON 中不包含 `deleted`/`creatorId`/`updaterId`(RoleDTO 继承 BaseDTO,不带审计字段) - [x] 测试:page 经 PageConverter,页大小超过上限被收敛(PageConverterTest 新增,共享护栏) - [x] 测试:saveOrUpdate 入参为 RoleDTO,提交 `createTime` 被 strip(GlobalDataBindingAdviceTest 覆盖) - [x] 测试:assignResources 保持 @RequestParam 不变