Swagger定义无Body参数的POST请求报JSON解析错误如何修复?
问题根因
这个错误是服务端使用的body-parser JSON解析中间件,尝试对无请求体的POST请求做格式校验导致:你的前端POST请求没有携带body,但默认携带了Content-Type: application/json头,空字符串不属于合法JSON结构,因此抛出解析异常。
解决方案
方案1:前端调用侧调整(无需修改后端代码)
你当前使用的请求封装默认会给所有POST请求添加JSON格式头,只需显式指定无body请求的头信息即可,示例代码:
// 显式指定Content-Type为text/plain,空body不会触发JSON解析规则 api.post('notification/seen', null, { headers: { 'Content-Type': 'text/plain' } })
方案2:服务端侧调整(无需修改前端调用代码,更符合接口规范)
子方案2.1 单独排除指定接口的JSON解析
如果你用的是Express框架,修改全局JSON中间件的规则,跳过该接口的解析:
// 替换原来的全局app.use(express.json())配置 app.use((req, res, next) => { if (req.path === '/notification/seen' && req.method === 'POST') { return next() } express.json()(req, res, next) })
子方案2.2 关闭JSON解析的严格模式
配置JSON中间件允许空请求体解析:
app.use(express.json({ strict: false // 关闭严格模式后,空请求体不会抛出解析异常 }))
补充Swagger定义修正
建议补全接口的请求体非必填声明,避免后续生成客户端代码时出现兼容问题:
/notification/seen: post: tags: - Notification requestBody: required: false # 明确标注请求体非必填 responses: 204: description: Update Seen Notification Success 401: description: Access Token Missing/Expired 500: description: Something went wrong!
内容的提问来源于stack exchange,提问作者Mahantesh
相关产品推荐
相关产品推荐

