dto-creator 是 Spring Agent Toolkit 中的一个技能,用于为实体创建 DTO(Data Transfer Object,数据传输对象)类。
用途 该技能在需要创建 DTO 类时使用,既可以单独创建,也可以作为更大任务的一部分。它面向 Spring 项目,配合 Amplicode IntelliJ 插件提供的 Spring MCP 服务器工作。
前置条件 该技能属于 Spring Agent Toolkit,设计上与 Spring MCP 服务器(由 Amplicode IntelliJ 插件提供)配合使用。使用前需检查工具列表中是否存在 Spring MCP 工具,它们暴露在 amplicode MCP 服务器下(例如 get_project_summary、list_module_dependencies、get_entity_details);将 MCP 工具扁平化到工具列表的环境使用 mcp__amplicode__ 前缀。
若至少有一个 Amplicode 工具可用,说明 MCP 已连接,可继续使用该技能。若没有可用工具,则需停止并调用随 Spring Agent Toolkit 捆绑的 amplicode-install 技能,它会安装 Amplicode 插件并引导用户完成「Настроить Spring Agent」欢迎界面按钮及 MCP 客户端重启。完成后 MCP 工具可用,再继续本技能。若 amplicode-install 未注册在技能列表中,需告知用户:该技能需要 Amplicode IntelliJ 插件及其 MCP 服务器,可从 https://amplicode.ru/marketplace 安装到 IntelliJ IDEA Ultimate/Community 或 GigaIDE,打开任意项目,在 Amplicode 欢迎界面点击「Настроить Spring Agent」,然后重启 MCP 客户端。
主要能力 为实体创建 DTO 类,支持 Java 类、Java record、Java+Lombok 或 Kotlin data class。可包含所选属性、构造器、getter/setter、equals/hashCode、toString 以及可选特性。
默认设置 实体(entity):必问,决定为哪个实体创建 DTO。 属性(attributes):默认包含实体全部字段,必问。 类名(className):默认 {EntityName}Dto,建议后确认。 语言(language):从 get_project_summary 自动检测。 变体(variant):根据语言与依赖自动判断,必问。 可变性(mutable):默认 false。 allArgsConstructor:默认 true,仅 Java 普通类。 equalsHashCode:默认 true,仅 Java 普通类。 toString:默认 true,仅 Java 普通类。 fluentSetters:默认 false,仅当 mutable=true 且为 Java 时。 jsonIgnoreUnknownProperties:默认 false,仅 Java 且类路径含 Jackson 时。 serializableType:默认 NoSerializable,很少需要。 包名(packageName):默认与实体同包,自动检测。 subDtoType(每个 ToOne 关联):默认 FLAT 且子对象仅含 id,必问。有四个选项:New Class / New Nested Class / Existing Class / Flat。「Only ID」不是独立选项,而是 Flat 且仅勾选子实体 id。 subDtoType(每个 ToMany / 集合):默认 NEW_NESTED_CLASS,必问。与 ToOne 相同的四个选项。Flat 对集合也支持,会生成复合复数形式字段,如 Set<Integer> specialtyIds。 fieldNameOverride(每个字段):默认无,逐字段重命名。 extraValidations(每个字段):默认无,在继承的校验之上由用户添加 jakarta 校验器。 removedValidations(每个字段):默认无,移除从实体继承的约束。 缩进(indent):来自 .editorconfig(回退为 4 空格)。
使用方式 技能强调先读取对话上下文,再执行步骤,避免重复询问用户已提供的信息。若用户表示「使用默认值」「全部默认」等,则跳过所有「是否必问」为否的问题,只问必问项。支持智能识别答案:用户直接给出值而非从编号列表选择时,直接接受。若用户一条消息中给出多个答案,全部接受并跳过已回答的问题。绝不询问用户已回答(即使隐含)的问题。
决策原则为「上下文优先,再询问」:在向用户提问前,先尝试从已收集的上下文(项目摘要、模块依赖、实体详情、包中已有文件、此前对话轮次、用户原始提示)推断答案。仅当上下文无明确默认值或选择确实取决于用户时才询问。上下文明确时静默决定;上下文给出强信号时用一行说明决定与备选,让用户覆盖或保持沉默;上下文无明确默认值时用 AskUserQuestion(优先)或其类似工具询问,推荐选项放首位;关键输入上下文完全为空时直接询问。
提问时优先使用 AskUserQuestion 工具(或其类似工具),而非在回复正文中写编号列表。每次调用最多包含 4 个相互独立的问题,每个问题 2–4 个选项,工具会自动添加「Other」自由输入项。推荐选项放在首位并标注 (Recommended)。「包含哪些字段」「添加哪些校验器」等多选场景使用 multiSelect: true。header 为 12 字符标签(如 Variant、Sub-DTO、Fields)。每个选项附一句说明其含义或后果。
步骤概览 Step 0:先读对话上下文(必需,无工具调用),建立输入清单,勾选用户已明确或隐含提供的内容,标记为已决定并跳过对应问题。注意 ARGUMENTS 不等于用户意图,判断用户「已说」的内容时只看实际用户消息。 Step 1:收集最小项目上下文(自动,无提问)。仅调用后续步骤实际消费的 MCP 工具:get_project_summary 获取 language、jdkVersion、moduleName;list_module_dependencies(moduleName) 获取 presentDeps。由此派生 hasLombok、hasJackson、hasValidation、canUseRecords 等变量。多模块项目需询问使用哪个模块。 Step 2:实体选择。若用户已提及实体则跳过提问,直接并行获取 get_entity_details(entityFqn)。仅当实体未知时才调用 list_all_domain_entities(moduleName) 并通过 AskUserQuestion 询问。 Step 3:属性选择。默认包含所有标量属性和所有关联。根据用途信号决定默认字段集:如「for REST」「for controller」「for API」包含所有标量加所有关联展开;「projection」「summary」「list view」仅标量,ToOne 关联为 Flat id,排除 ToMany;「for mapping」「for service」包含所有标量加所有关联展开;明确字段列表则严格按用户指定;无用途信号则包含所有标量加所有关联展开。
适用场景 适用于 Spring 项目中需要为实体生成 DTO 的场景,例如为 REST 接口、控制器、API、映射、投影、服务等创建数据传输对象。当 DTO 将用于实体与 DTO 之间的转换代码(控制器、服务、端点替换等)时,技能必须委派给 mapper-creator,绝不内联编写手动映射代码。mapper-creator 决定实现方式(MapStruct、Custom、添加依赖),本技能只负责委派。
限制 代码只能来自 examples/ 文件;若无匹配示例则停止并询问用户。对于有固定选项集的问题,优先使用 AskUserQuestion 而非纯文本列表。Step 7(mapper)在需要转换时自动执行。subDtoType 绝不静默决定,至少需要一行确认,除非用户在自己的消息中明确说明形状。插件向导的界面保真度不是目标,生成正确性才是。