Swagger UI中JSON解码失败求助:API测试无法解析JSON参数
Swagger测试API时JSON解析失败
我正在开发一个小型API,用Swagger UI测试时需要传入JSON参数。以下是我的函数代码:
@APP.post('/get_query_by_id') def create_new_query(): """Make queries to database --- post: summary: Creates a new query tags: ["Queries"] consumes: - application/json parameters: - in: body name: query description: New cypher query and description to create schema: type: object required: - userName properties: query: type: string description: type: string responses: 201: description: OK """ json_file = request.get_json(force=True)
执行到json_file = request.get_json(force=True)时触发错误:Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)。我的Swagger文档界面如下:

问题原因及解决办法
请求参数定义不一致
Swagger schema中标记了userName为必填项,但既没在properties里定义该字段,也没在Swagger界面中显示,导致请求体缺少必填字段或格式不合法,触发JSON解析失败。另外接口路径/get_query_by_id与创建查询的功能语义不符,建议调整为/create_query。具体修复步骤
- 修正Swagger schema:若确实需要
userName,需在properties中补充其定义;若不需要,直接从required列表移除该字段。 - 在Swagger UI中填写合法的JSON请求体,示例如下:
{ "userName": "test_user", "query": "MATCH (n) RETURN n", "description": "测试查询" } - 确认Flask应用已导入
request对象:代码开头需添加from flask import request,避免因找不到request引发隐性错误。 - 移除
force=True参数:该参数会强制解析非JSON格式请求,容易导致解析失败,改用request.get_json()让Flask仅处理标准JSON请求。
- 修正Swagger schema:若确实需要
修正后的示例代码
from flask import Flask, request APP = Flask(__name__) @APP.post('/create_query') def create_new_query(): """Make queries to database --- post: summary: Creates a new query tags: ["Queries"] consumes: - application/json parameters: - in: body name: query description: New cypher query and description to create schema: type: object required: - userName - query properties: userName: type: string query: type: string description: type: string responses: 201: description: OK """ json_file = request.get_json() if not json_file: return {"error": "无效的JSON请求"}, 400 # 后续业务逻辑处理 return {"message": "查询创建成功"}, 201
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

