Flask接收JSON POST请求遇Unsupported Media Type错误排查
以下是几种可能导致该错误的原因及解决办法:
请求体不是合法JSON
虽然你设置了Content-Type: application/json,但如果实际发送的请求体不是标准JSON格式,Flask依然无法解析。比如JSON里存在语法错误(多余逗号、引号不闭合),或者包含了不能被JSON序列化的类型(如undefined、函数)。
解决:前端发送前务必用JSON.stringify()处理数据,并且检查序列化后的字符串是否合法(可以用在线JSON校验工具验证)。Flask的
get_json()严格模式冲突
Flask的request.get_json()默认开启strict=True,会严格匹配Content-Type的值必须是application/json。如果你的请求头里的Content-Type带有额外参数(比如application/json; charset=utf-8),就会触发这个错误。
解决:要么在Flask里改用request.get_json(strict=False),要么确保前端请求头的Content-Type只写application/json,不带任何附加信息。请求头被中间件/代理篡改
如果你的请求经过了Nginx、CDN之类的代理或中间件,它们可能会修改Content-Type头(比如自动添加字符集参数),导致Flask内部检测到的头和你预期的不一致。
解决:在Flask接口里直接打印request.headers.get('Content-Type')的完整值,确认实际收到的头内容,再针对性调整。前端fetch配置存在隐藏问题
比如你不小心用了FormData作为请求体(浏览器会自动覆盖Content-Type为multipart/form-data),或者headers的设置被其他代码覆盖。
解决:检查前端代码,确保body是JSON.stringify(yourData),并且headers的配置正确,示例:fetch('/AddPosition', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ key: 'value' }) })
内容的提问来源于stack exchange,提问作者Artem

