hongjli
2025-04-15 c4713a63f88a72a4aaabaa70fe4a7ea08262fa60
优化
已添加1个文件
已修改1个文件
290 ■■■■■ 文件已修改
docs/UserController_API_Test.md 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/weiwojc/controller/UserController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/UserController_API_Test.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,285 @@
# UserController æŽ¥å£æµ‹è¯•文档
## 1. ç”¨æˆ·æ³¨å†ŒæŽ¥å£
### æŽ¥å£ä¿¡æ¯
- è¯·æ±‚路径:`/api/users/register`
- è¯·æ±‚方法:POST
- è¯·æ±‚体类型:application/json
### è¯·æ±‚参数
```json
{
    "nickname": "用户昵称",
    "accountName": "账号名",
    "password": "密码"
}
```
### æµ‹è¯•用例
#### æˆåŠŸåœºæ™¯
1. æ­£å¸¸æ³¨å†Œ
   - è¯·æ±‚参数:
     ```json
     {
         "nickname": "测试用户",
         "accountName": "test123",
         "password": "password123"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 200,
         "message": "注册成功",
         "data": {
             "id": 1,
             "nickname": "测试用户",
             "accountName": "test123"
         }
     }
     ```
#### å¤±è´¥åœºæ™¯
1. è´¦å·åå·²å­˜åœ¨
   - è¯·æ±‚参数:
     ```json
     {
         "nickname": "测试用户",
         "accountName": "existing_user",
         "password": "password123"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "账号名已存在"
     }
     ```
2. è´¦å·åæ ¼å¼é”™è¯¯
   - è¯·æ±‚参数:
     ```json
     {
         "nickname": "测试用户",
         "accountName": "ab",  // å°‘于4位
         "password": "password123"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "账号名必须是4-16位字母、数字或下划线"
     }
     ```
3. å¯†ç æ ¼å¼é”™è¯¯
   - è¯·æ±‚参数:
     ```json
     {
         "nickname": "测试用户",
         "accountName": "test123",
         "password": "123"  // å°‘于6位
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "密码必须是6-16位字母、数字或下划线"
     }
     ```
4. å¿…填字段为空
   - è¯·æ±‚参数:
     ```json
     {
         "nickname": "",
         "accountName": "",
         "password": ""
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "用户名不能为空"
     }
     ```
## 2. ç”¨æˆ·ç™»å½•接口
### æŽ¥å£ä¿¡æ¯
- è¯·æ±‚路径:`/api/users/login`
- è¯·æ±‚方法:POST
- è¯·æ±‚体类型:application/json
### è¯·æ±‚参数
```json
{
    "accountName": "账号名",
    "password": "密码"
}
```
### æµ‹è¯•用例
#### æˆåŠŸåœºæ™¯
1. æ­£å¸¸ç™»å½•
   - è¯·æ±‚参数:
     ```json
     {
         "accountName": "test123",
         "password": "password123"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 200,
         "message": "登录成功",
         "data": "eyJhbGciOiJIUzI1NiJ9..."  // JWT token
     }
     ```
#### å¤±è´¥åœºæ™¯
1. è´¦å·ä¸å­˜åœ¨
   - è¯·æ±‚参数:
     ```json
     {
         "accountName": "nonexistent",
         "password": "password123"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "账号不存在"
     }
     ```
2. å¯†ç é”™è¯¯
   - è¯·æ±‚参数:
     ```json
     {
         "accountName": "test123",
         "password": "wrong_password"
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "密码错误"
     }
     ```
3. å¿…填字段为空
   - è¯·æ±‚参数:
     ```json
     {
         "accountName": "",
         "password": ""
     }
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "账号名不能为空"
     }
     ```
## 3. èŽ·å–ç”¨æˆ·ä¿¡æ¯æŽ¥å£
### æŽ¥å£ä¿¡æ¯
- è¯·æ±‚路径:`/api/users/info`
- è¯·æ±‚方法:GET
- è¯·æ±‚头:需要携带 token
### æµ‹è¯•用例
#### æˆåŠŸåœºæ™¯
1. æ­£å¸¸èŽ·å–ç”¨æˆ·ä¿¡æ¯
   - è¯·æ±‚头:
     ```
     token: eyJhbGciOiJIUzI1NiJ9...
     ```
   - é¢„期响应:
     ```json
     {
         "code": 200,
         "data": {
             "id": 1,
             "nickname": "测试用户",
             "accountName": "test123"
         }
     }
     ```
#### å¤±è´¥åœºæ™¯
1. æœªæºå¸¦ token
   - è¯·æ±‚头:无 token
   - é¢„期响应:
     ```json
     {
         "code": 401,
         "message": "未登录或token无效"
     }
     ```
2. token æ— æ•ˆ
   - è¯·æ±‚头:
     ```
     token: invalid_token
     ```
   - é¢„期响应:
     ```json
     {
         "code": 401,
         "message": "token无效或已过期"
     }
     ```
3. token å·²è¿‡æœŸ
   - è¯·æ±‚头:
     ```
     token: expired_token
     ```
   - é¢„期响应:
     ```json
     {
         "code": 401,
         "message": "token无效或已过期"
     }
     ```
4. ç”¨æˆ·ä¸å­˜åœ¨
   - è¯·æ±‚头:
     ```
     token: valid_token_for_nonexistent_user
     ```
   - é¢„期响应:
     ```json
     {
         "code": 400,
         "message": "用户不存在"
     }
     ```
## æµ‹è¯•工具建议
1. Postman
2. Swagger UI
3. JMeter(用于性能测试)
## æ³¨æ„äº‹é¡¹
1. æ‰€æœ‰æŽ¥å£éƒ½æ”¯æŒè·¨åŸŸè¯·æ±‚
2. æ³¨å†Œå’Œç™»å½•接口使用 `@Valid` æ³¨è§£è¿›è¡Œå‚数验证
3. ç”¨æˆ·ä¿¡æ¯æŽ¥å£éœ€è¦æœ‰æ•ˆçš„ JWT token
4. å¯†ç åœ¨ä¼ è¾“过程中应该使用 HTTPS åР坆
5. å»ºè®®åœ¨æµ‹è¯•环境中使用测试数据库
6. æµ‹è¯•时注意清理测试数据,避免影响其他测试用例
src/main/java/com/weiwojc/controller/UserController.java
@@ -39,11 +39,12 @@
            return Result.unauthorized("未登录或token无效");
        }
        Long userId = jwtUtils.getUserIdFromToken(token);
        if (userId == null) {
        // éªŒè¯token是否有效
        if (!jwtUtils.validateToken(token)) {
            return Result.unauthorized("token无效或已过期");
        }
        Long userId = jwtUtils.getUserIdFromToken(token);
        User user = userService.getUserInfo(userId);
        if (user == null) {
            return Result.error("用户不存在");