Thunder Client POST JSON 返回415的主因是未手动设置Content-Type: application/json头、Body未选JSON模式且JSON不合法;Query Params需点击Add to URL才生效;环境变量须正确命名、选中并预览确认替换。

Thunder Client 不是“装了就能用”的工具,它默认不自动补头、不智能拼参、不 fallback 解码——错一个细节,400/415/卡死/变量不生效就立刻出现。
POST JSON 请求总返回 415?检查这三处
415 Unsupported Media Type 的核心原因不是后端拒收,而是 Thunder Client 没把请求“说清楚”:
-
Body必须手动切到 raw → JSON 模式(不是 Text、Form Data 或 GraphQL) -
Headers栏必须显式添加一行:Content-Type→application/json - JSON 内容要合法:
{"name": "alice", "id": 1}✅,{name: "alice"}❌,末尾多逗号也报错
后端也要匹配:Express 需 app.use(express.json());Fastify 默认不解析 JSON,得配 bodyLimit 和 jsonSchema。
Query Params 填了却没发出去?别信“自动拼接”
Thunder Client 的 Params 栏只是参数编辑器,不是 URL 构建器。它不会自动把参数塞进 URL —— 除非你点右上角的 Add to URL 按钮。
- 最稳写法:直接写完整 URL,比如
https://api.example.com/users?id=123&active=true - 想用
Params栏管理参数?填完必须点Add to URL,否则等于白填 - 中文或特殊字符(如空格、&、=)要自己 URL 编码:
name=%E5%BC%A0%E4%B8%89,Thunder Client 不自动处理 - 参数多且常变?改用环境变量:
{{base_url}}/users?id={{user_id}},再在 Environment 里定义user_id = 123
环境变量不生效?两个前提缺一不可
变量名写对、值设对,不代表它就起作用。Thunder Client 不提示“替换失败”,它只默默发错请求。
- 当前环境必须被选中:看 VSCode 左下角状态栏是否显示
Environment: dev,点击可切换 - 变量名必须完全匹配:大小写敏感,只允许字母、数字、下划线;
base-url❌,base_url✅ - URL 和 Header 中必须用双大括号包裹:
{{base_url}}、Authorization: Bearer {{token}} - 第一次配置后,务必点请求左下角的 Preview,确认实际发出的 URL 和 Header 是否已替换
响应卡死、乱码、测试不执行?不是网络问题
这些现象基本都来自 Thunder Client 的渲染和执行机制边界:
- 响应体超大(几 MB JSON)会卡死:它用同步渲染,没做流式解析;临时方案是用
curl+jq或浏览器看 Raw 响应 - 中文乱码:大概率是响应头没带
charset=utf-8,Thunder Client 不 fallback,也不强制按 UTF-8 解码 - Tests 标签页断言不执行或报错:脚本运行在沙盒 JS 环境中,不支持
async/await、import、fetch;合法写法只有同步表达式,例如:pm.test("status code is 200", () => { pm.expect(pm.response.code).to.equal(200); }); -
pm.response.json()可用,但若响应体不是合法 JSON,会直接抛错且不报具体位置——建议先点响应面板的 Raw 查看原始内容
真正容易被忽略的是:环境变量只对当前工作区生效;如果开了多根文件夹(multi-root workspace),需在对应文件夹下单独配置环境。


















