Files
ccdi/form-data修复完成报告.md
wkc 626f7d566b feat: 修复接口参数并改为form-data格式
- 添加缺失的认证参数:appId, appSecretCode, role
- 修复 analysisType 和 departmentCode 参数
- 将所有接口改为使用 Form 参数(form-data 格式)
- 更新服务层支持字典参数
- 更新所有测试代码
- 所有测试通过(7/7)
2026-03-03 13:40:56 +08:00

6.7 KiB
Raw Blame History

Form-Data 修复完成报告

修复日期

2026-03-03

修复人员

Claude Code

修复状态

已完成 - 所有接口已改为 form-data 方式,测试全部通过


📝 问题说明

用户指出:接口参数应该通过 form-data 进行传输

原代码使用 JSON body (json=) 方式传输参数,但接口文档要求使用 form-data (application/x-www-form-urlencoded) 方式传输。


🔧 修复内容

1. 修改接口参数接收方式

将所有接口从 json= 改为使用 FastAPI 的 Form 参数

修改前:

@router.post("/account/common/getToken")
async def get_token(request: GetTokenRequest):
    # 接收 JSON body
    ...

修改后:

@router.post("/account/common/getToken")
async def get_token(
    projectNo: str = Form(..., description="项目编号"),
    entityName: str = Form(..., description="项目名称"),
    userId: str = Form(..., description="操作人员编号"),
    # ... 其他参数
):
    # 构建请求对象
    request = GetTokenRequest(
        projectNo=projectNo,
        entityName=entityName,
        ...
    )
    ...

2. 修改的接口列表

接口 路径 修改内容
1 /account/common/getToken 15个 Form 参数
2 /watson/api/project/remoteUploadSplitFile 已使用 Form
4 /watson/api/project/upload/getpendings 2个 Form 参数
5 /watson/api/project/batchDeleteUploadFile 3个 Form 参数
6 /watson/api/project/getBSByLogId 4个 Form 参数

3. 修改的文件

核心代码

  1. routers/api.py - 所有接口改为使用 Form 参数
    • 接口1: 15个 Form 参数
    • 接口3: 7个 Form 参数
    • 接口4: 2个 Form 参数
    • 接口5: 3个 Form 参数(支持逗号分隔的字符串)
    • 接口6: 4个 Form 参数

测试代码

  1. tests/conftest.py - 更新测试 fixture
  2. tests/test_api.py - 更新单元测试
    • json= 改为 data=
  3. tests/integration/test_full_workflow.py - 更新集成测试
    • 将所有 json= 改为 data=

文档

  1. README.md - 更新使用示例
    • 将示例代码改为使用 data= 参数

测试结果

============================= test session starts =============================
platform win32 -- Python 3.13.12, pytest-9.0.2, pluggy-1.6.0
rootdir: D:\ccdi\ccdi\.claude\worktrees\lsfx-mock-server\lsfx-mock-server
plugins: anyio-4.12.1, cov-7.0.0
collected 7 items

tests/integration/test_full_workflow.py::test_complete_workflow PASSED   [ 14%]
tests/integration/test_full_workflow.py::test_all_error_codes PASSED     [ 28%]
tests/integration/test_full_workflow.py::test_pagination PASSED          [ 42%]
tests/test_api.py::test_root_endpoint PASSED                             [ 57%]
tests/test_api.py::test_health_check PASSED                              [ 71%]
tests/test_api.py::test_get_token_success PASSED                         [ 85%]
tests/test_api.py::test_get_token_error_40101 PASSED                     [100%]

======================== 7 passed, 1 warning in 0.08s =========================

结论: 所有 7 个测试用例通过


📖 使用示例

Python requests

import requests

# ✅ 正确方式:使用 data 参数
response = requests.post(
    "http://localhost:8000/account/common/getToken",
    data={  # 使用 data 参数,不是 json
        "projectNo": "test_project_001",
        "entityName": "测试企业",
        "userId": "902001",
        "userName": "902001",
        "appId": "remote_app",
        "appSecretCode": "your_secret_code",
        "role": "VIEWER",
        "orgCode": "902000",
        "departmentCode": "902000"
    }
)

curl 命令

# ✅ 使用 form-data 方式
curl -X POST http://localhost:8000/account/common/getToken \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "projectNo=test_project_001" \
  -d "entityName=测试企业" \
  -d "userId=902001" \
  -d "userName=902001" \
  -d "appId=remote_app" \
  -d "appSecretCode=your_secret_code" \
  -d "role=VIEWER" \
  -d "orgCode=902000" \
  -d "departmentCode=902000"

Swagger UI

访问 http://localhost:8000/docsSwagger UI 会自动显示正确的参数格式form-data


🎯 关键改进

1. 正确的 Content-Type

  • 修改前: application/json
  • 修改后: application/x-www-form-urlencoded

2. 参数传递方式

  • 修改前: 使用 json={} 参数
  • 修改后: 使用 data={} 参数

3. FastAPI 自动处理

FastAPI 会自动:

  • 解析 form-data 格式的参数
  • 进行类型转换
  • 生成正确的 Swagger 文档

⚠️ 重要提示

1. 不向后兼容

此修复不向后兼容

所有调用这些接口的客户端需要:

  • json= 改为 data=
  • Content-Typeapplication/json 改为 application/x-www-form-urlencoded

2. 数组参数处理

对于接口5删除文件logIds 参数:

  • 传递方式: 逗号分隔的字符串,如 "10001,10002,10003"
  • 后端处理: 自动解析为整数列表

3. 可选参数

可选参数可以:

  • 不传递
  • 传递空值
  • 传递默认值

📊 对比总结

项目 修改前 修改后
参数格式 JSON body Form-data
Content-Type application/json application/x-www-form-urlencoded
Python requests json={} data={}
curl -H "Content-Type: application/json" -d '{...}' -d "key=value"
Swagger UI Request body Form data
测试状态 2 failed 7 passed

修复验证清单

  • 将所有接口改为使用 Form 参数
  • 更新 GetToken 接口15个参数
  • 更新 FetchInnerFlow 接口7个参数
  • 更新 CheckParseStatus 接口2个参数
  • 更新 DeleteFiles 接口3个参数
  • 更新 GetBankStatement 接口4个参数
  • 更新所有测试代码
  • 运行测试通过7/7 passed
  • 更新 README.md 示例
  • 创建修复文档

📄 相关文档

  1. 接口参数检查报告.md - 参数对比分析
  2. 修复总结.md - 参数修复记录
  3. form-data修复说明.md - 本次修复说明

🎉 修复结论

状态: 修复完成

所有接口已改为使用 form-data 方式传输参数与接口文档要求完全一致。Mock 服务器现在完全符合真实接口的调用方式。

下一步: 可以开始使用修复后的 Mock 服务器进行开发和测试。请确保所有客户端代码使用 data= 参数而不是 json= 参数。


修复人员: Claude Code 修复日期: 2026-03-03 版本: v1.2.0