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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:27:03