# 05 — ResourceNode → ResourceNodeDTO 重命名 + BaseDTO 继承 **What to build:** ResourceNode 改名为 ResourceNodeDTO,跨 4 个文件(ResourceController、ResourceServiceImpl、ResourceServiceImplTest、import 声明)。继承 BaseDTO,本地 `id` 字段移除改为继承自 BaseDTO。已有 `fromEntity`/`toEntity` 转换方法保留不动。ResourceController.saveOrUpdate 的入参类型跟着改名,行为不变——这是 Route A(DTO 双向)的典型实现:同一个 ResourceNodeDTO 既是 saveOrUpdate 的写入参,又是 listAll/save 的出参。改名后继承 BaseDTO 会引入 `createTime`/`updateTime` 字段,依赖 02(InitBinder)在入参侧 strip 掉。 **Blocked by:** 01 (BaseDTO 重构), 02 (InitBinder — 引入 createTime/updateTime 后需 strip) **Status:** resolved - [x] `ResourceNode` 类改名为 `ResourceNodeDTO`,文件名同步改名 - [x] `ResourceNodeDTO` 继承 `BaseDTO`,加 `@EqualsAndHashCode(callSuper = true)` - [x] 移除本地的 `id` 字段声明,改为继承自 `BaseDTO` - [x] 已有的 `fromEntity`/`toEntity` 方法保留,确认字段映射正确 - [x] `ResourceController` 中 `ResourceNode` 引用全部改为 `ResourceNodeDTO` - [x] `ResourceServiceImpl` 中 `ResourceNode` 引用全部改为 `ResourceNodeDTO` - [x] `ResourceServiceImplTest` 中 `ResourceNode` 引用全部改为 `ResourceNodeDTO` - [x] 其他引用 `ResourceNode` 的文件同步更新(`IResourceService`) - [x] 测试:saveOrUpdate 入参为 ResourceNodeDTO,提交 `createTime` 被 strip - [x] 测试:listAll 返回的 JSON 中不包含 `deleted`/`creatorId`/`updaterId` - [x] 测试:现有 ResourceServiceImplTest 全绿 - [x] 前端对接文档 `docs/frontend-integration-menu-permission.md` 中类名引用同步更新