You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swagger2.0构建Python-Flask后端:POST请求返回200而非预期状态码

问题分析与解决步骤

嘿,这大概率不是Bug,而是Swagger Codegen生成Flask服务器的默认行为,或者你的Swagger定义里的响应配置没到位。我帮你一步步排查:

1. 先确认Swagger定义里的响应声明

首先回到Swagger在线编辑器,检查你的POST /image端点是否明确声明了201 Created响应,并且有没有把201设为预期的成功响应。很多时候用户可能只添加了200响应,或者没有指定默认成功状态码,Codegen会默认以200作为成功返回码。

正确的Swagger响应定义示例应该是这样的:

/image:
  post:
    summary: 上传图片
    # 其他配置(请求体、参数等)...
    responses:
      201:
        description: 图片上传成功,资源已创建
      400:
        description: 请求参数错误或格式不符

如果你的定义里没有201,或者200仍然存在且未明确优先级,生成的代码会默认沿用200作为成功返回。

2. 检查生成的Flask控制器代码

打开生成的服务器代码目录,找到swagger_server/controllers/image_controller.py文件,查看post_image()方法的实现。默认情况下,Swagger Codegen生成的是占位逻辑,直接返回了200,比如:

def post_image():
    """
    POST /image
    上传图片
    """
    # 此处为自动生成的占位代码
    return '操作成功', 200

你需要手动修改这个返回值,把状态码改成201,同时补充你的业务逻辑(比如图片存储、数据库写入等):

def post_image():
    """
    POST /image
    上传图片
    """
    # 这里添加你的实际业务逻辑:比如解析请求体、保存图片等
    save_image_to_storage()
    return '图片上传成功,资源已创建', 201

3. 验证修改后的效果

修改代码后,重启服务:

python -m swagger_server

再用Postman发送POST请求,就能得到预期的201状态码了。


内容的提问来源于stack exchange,提问作者Diego Aguado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:04:39