---
name: fr:gen
license: Apache-2.0
description: 为 Java/Kotlin Web 框架生成语义化的请求参数（JSON/Query/Form），并复制到剪贴板
allowed-tools:
  - Glob
  - Read
  - Bash
arguments:
  - name: type
    description: 参数类型，支持 'json'（JSON 请求体）、'query'（Query 参数）、'form'（Form 参数）
    required: true
  - name: method
    description: 完全限定方法名，格式为 'package.ClassName.methodName'（例如：io.github.kings1990.controller.UserController.addUserInfo）
    required: true
---

# Fast Request 参数生成器

此技能为 Java/Kotlin Web 框架自动生成语义化的请求参数，支持三种参数类型：JSON 请求体、Query 参数和 Form 参数。

## 支持的框架和语言
参考 [all-rules.md](./rules/all-rules.md) 通用说明>支持的框架和支持的编程语言。

## 执行流程

**重要**：本技能支持根据系统语言环境自动生成符合当地语言习惯的参数值。

### 系统语言检测

在开始生成参数之前，技能会自动检测系统语言，并根据检测结果生成相应语言的字符串内容：

- 🇨🇳 中文环境 → 生成中文姓名、地址、描述等
- 🇺🇸 英文环境 → 生成英文姓名、地址、描述等
- 🇯🇵 日文环境 → 生成日文姓名、地址、描述等
- 🇰🇷 韩文环境 → 生成韩文姓名、地址、描述等

**详细的语言检测规则和字段适配说明**，请参考：
- [all-rules.md](./rules/all-rules.md) - 国际化支持



### 参数类型路由

根据 `type` 参数的值，加载对应的子文档：
- 如果 `type` 是 `json`，参考 [category/json.md](./category/json.md) 执行
- 如果 `type` 是 `query`，参考 [category/query.md](./category/query.md) 执行
- 如果 `type` 是 `form`，参考 [category/form.md](./category/form.md) 执行


## 使用指令

### 指令格式

此技能支持三种参数类型，用于生成不同类型的请求参数：

#### 1. JSON 请求体生成

**适用场景**：
- POST/PUT/PATCH 请求
- 方法参数带有 `@RequestBody` 或 `@Body` 注解
- 需要发送复杂对象数据

**示例1**：
```
/fr:gen json io.github.kings1990.controller.UserController.addUserInfo
```

**示例2**：
```
/fr:gen --type=json --method=io.github.kings1990.controller.OrderController.createOrder
```

#### 2. Query 参数生成

**适用场景**：
- GET 请求
- 方法参数带有 `@RequestParam`、`@Param`、`@PathVariable`、`@Path` 注解
- URL 查询字符串参数

**示例1**：
```
/fr:gen query io.github.kings1990.controller.UserController.getUserList
```

**示例2**：
```
/fr:gen --type=query --method=io.github.kings1990.controller.ProductController.searchProducts
```

#### 3. Form 参数生成（URL-Encoded）

**适用场景**：
- POST 请求（Content-Type: application/x-www-form-urlencoded）
- 方法参数带有 `@RequestParam`、`@Param`、`@ModelAttribute` 注解
- 传统 HTML 表单提交

**示例1**：
```
/fr:gen form io.github.kings1990.controller.UserController.register
```

**示例2**：
```
/fr:gen --type=form --method=io.github.kings1990.controller.FeedbackController.submitFeedback
```

#### 4. 不带类型参数的简化指令

**示例**：
```
/fr:gen io.github.kings1990.controller.FeedbackController.submitFeedback
```

上面的指令会根据方法参数中是否包含特定注解来判断使用哪种参数类型。你需要去判断到底是前面 3 种的哪一种。
##### 生成 JSON 请求体参数
方法参数中**必须**包含 `@RequestBody` 或 `@Body` 注解，没有前面提到的注解则不能使用该规则

##### 生成 Form 参数

方法参数中**必须**包含 `@Param`、`@ModelAttribute` 注解，如果没有注解，并且方法必须有`@PostMapping`注解或者`@RequestMapping(method = RequestMethod.POST)`注解

##### 生成 Query 参数
方法参数中**必须**包含 `@RequestParam`、`@Param` 注解,或者方法必须有`@GetMapping`注解或者`@RequestMapping(method = RequestMethod.GET)`注解


优先级依次为 JSON > Form > Query


## 何时使用

当用户输入以下格式之一的指令时，此技能会自动激活：

- `/fr:gen json package.ClassName.methodName`
- `/fr:gen query package.ClassName.methodName`
- `/fr:gen form package.ClassName.methodName`
- `/fr:gen package.ClassName.methodName`

## 扩展阅读

- **JSON 生成器详细文档**：[json.md](./category/json.md)
- **Query 生成器详细文档**：[query.md](./category/query.md)
- **Form 生成器详细文档**：[form.md](./category/form.md)



## 输出限制
Query和Form参数最终的输出前面不允许带上问号（?）
永远不要对参数进行编码，直接使用参数名和值。
输出的时候如果参数已经被编码，需要解码后再输出。