بنقرة واحدة
dto-validation-analyzer
分析给定的 JSON 请求数据是否与 Java 后台 DTO 定义吻合,检查字段缺失、字段名不匹配、类型不匹配、必填校验等问题。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
分析给定的 JSON 请求数据是否与 Java 后台 DTO 定义吻合,检查字段缺失、字段名不匹配、类型不匹配、必填校验等问题。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
为 Vue 3 + Ant Design Vue 表单系统新增自定义校验规则。支持正则校验、值范围校验、日期校验等。包含类型定义、校验实现、单元测试的完整流程。
将 AI 聊天内容提炼为结构化技术文档并保存到 Obsidian 知识库。支持三种文档类型:问题解决型、知识学习型、方案对比型。自动推断知识库分类目录,生成符合 Obsidian 规范的 Markdown 文件(含 frontmatter、双链)。适用于:(1) 聊天中解决了技术问题后想记录下来,(2) 学到新知识想沉淀到知识库,(3) 对比了多个方案后想保存决策过程。触发条件:用户说"保存到知识库"、"导出到 Obsidian"、"记录到笔记"、"保存这次对话"、"转成文档"等。
将Excel工作簿按工作表拆分为独立的Excel文件,每个工作表生成一个单独的文件。适用场景:(1) 将多工作表Excel文件拆分为单独文件,(2) 提取特定工作表为独立文件,(3) 分发合并工作簿中的工作表,(4) 为单独处理或分发创建工作表副本。
将 Excel 文件转换为 Markdown 表格,支持合并单元格处理、多工作表输出、基础字体语义(粗体/斜体)与超链接转换。适用于将式样书、数据表转为可读的 Markdown 文档。
自动化 GitHub PR 工作流 - 基于当前分支创建 PR、获取用户输入、检查冲突并自动合并。支持 squash 合并模式,遇到冲突时停止并提示用户。
将 Java DTO 类文件转换为 TypeScript interface,自动处理类型映射、@Required/@Schema 注解、嵌套类,并生成完整的 JSDoc 注释。
| name | dto-validation-analyzer |
| description | 分析给定的 JSON 请求数据是否与 Java 后台 DTO 定义吻合,检查字段缺失、字段名不匹配、类型不匹配、必填校验等问题。 |
分析用户提供的 JSON 请求数据是否与 Java 后台 DTO 类定义吻合,找出所有不匹配的问题。
当用户提供了一段 JSON 数据和一个 Java DTO 类定义(或文件路径),并要求检查数据是否与 DTO 吻合、能否通过 validation 时,使用本技能。
确定 DTO 字段的实际序列化名称,优先级如下:
@JsonProperty("name") 的值@Schema(name = "name") 的值(仅在框架使用 Schema name 做序列化时)重要:对比时使用 DTO 字段的序列化名称(而非 Java 字段名),与 JSON 中的 key 进行匹配。
检查项:
teikiBusu vs teikiBunBusu)识别以下注解标注的必填字段:
@Required@NotNull@NotBlank@NotEmpty检查 JSON 中这些字段是否:
@NotBlank)@NotEmpty)对比 JSON 中值的类型与 DTO 字段声明的类型:
| DTO Java 类型 | JSON 期望类型 | 常见问题 |
|---|---|---|
String | string | 发送了 number 或 boolean |
Integer / Long / int / long | number (整数) | 发送了 string 或小数 |
Double / Float / BigDecimal | number | 发送了 string |
Boolean / boolean | boolean | 发送了 string "true" |
List<T> / Set<T> | array | 发送了单个对象而非数组 |
Date / LocalDateTime 等 | string (日期格式) | 格式不正确 |
注意:Spring 默认的 Jackson 会自动做一些类型转换(如 number → String),但这属于隐式转换,仍应标记为⚠️ 提醒。
检查带格式注解的字段值是否符合要求:
@DateFormat("yyyyMM") → 值应匹配 yyyyMM 格式(如 "202603")@DateFormat("yyyyMMdd") → 值应匹配 yyyyMMdd 格式@Pattern(regexp = "...") → 值应匹配正则@TrueNumber → 值应为合法数字(字符串形式时也应为数字字符串)@Email → 值应为邮箱格式@Size(min=x, max=y) → 字符串长度或集合大小应在范围内List<T> 类型,对数组中的每一个元素进行分析,并在报告中标注是第几个元素出的问题@Valid 级联校验如果字段或泛型参数上有 @Valid 注解,说明 Spring 会对该嵌套对象/列表元素做级联校验,需要递归检查嵌套结构内的 validation 注解。
按照问题严重程度分组输出:
## 数据与 DTO 匹配分析报告
### ❌ 必定失败(Validation Error)
> 这些问题会导致请求被后台拒绝
| 级别 | 位置 | 问题 | 说明 |
|------|------|------|------|
| ... | ... | ... | ... |
### ⚠️ 潜在问题(Warning)
> 这些问题可能导致数据丢失或行为异常
| 级别 | 位置 | 问题 | 说明 |
|------|------|------|------|
| ... | ... | ... | ... |
### ℹ️ 信息提示(Info)
> 非必填且未发送的字段,不会导致错误
| 字段 | 说明 |
|------|------|
| ... | ... |
### ✅ 总结
简要概括主要问题和建议修复方向。
❌ 必定失败:
@Required / @NotNull / @NotBlank / @NotEmpty 标注的字段@DateFormat / @Pattern 要求⚠️ 潜在问题:
@TrueNumber 字段传了非字符串类型的数字ℹ️ 信息提示:
JSON 数据:
{
"seikyuKikanFrom": "202603",
"seikyuKikanTo": "202603",
"kodokuId": 19,
"kodokuInfo": {
"yusoKbn": "2",
"hinList": [
{
"hinCd": "01",
"kihonBusu": 1,
"teikiBunBusu": 0
}
]
}
}
Java DTO(关键部分):
@Data
public class CalcKdYsPriceReqDto {
@Required
@DateFormat("yyyyMM")
private String seikyuKikanFrom;
@Required
@DateFormat("yyyyMM")
private String targetMonth; // ← @Required
private Integer kodokuId;
@Valid
private KodokuInfo kodokuInfo;
public static class HinItem {
@TrueNumber
@Schema(name = "kihonBusu")
private String kihonBusu; // ← 类型是 String
@TrueNumber
@Schema(name = "teikiBusu") // ← 注意 Schema name
private String teikiBusu;
}
}
## 数据与 DTO 匹配分析报告
### ❌ 必定失败(Validation Error)
| 级别 | 位置 | 问题 | 说明 |
|------|------|------|------|
| ❌ | `targetMonth` | 缺少必填字段 | 标注了 `@Required` + `@DateFormat("yyyyMM")`,但 JSON 中未提供 |
### ⚠️ 潜在问题(Warning)
| 级别 | 位置 | 问题 | 说明 |
|------|------|------|------|
| ⚠️ | `kodokuInfo.hinList[0].teikiBunBusu` | 字段名不匹配 | JSON 用 `teikiBunBusu`,DTO @Schema name 为 `teikiBusu` |
| ⚠️ | `kodokuInfo.hinList[0].kihonBusu` | 类型隐式转换 | JSON 发送 number `1`,DTO 类型为 `String`,Jackson 会自动转换但不推荐 |
### ✅ 总结
主要问题是缺少必填字段 `targetMonth`。此外 `teikiBunBusu` 字段名与 DTO 不匹配,数据会丢失。