GraphQL接口请求报错:解析请求体失败,存在无效字符'G'
我来帮你搞定这个问题——这个400错误本质是你的请求体不符合JSON格式,导致GraphQL服务没法正常解析。咱们从最可能的原因开始排查:
检查
data.json的内容结构
错误提示里的无效字符'G',大概率是你的data.json没有用正确的JSON结构包裹GraphQL查询。GraphQL的POST请求要求请求体是一个JSON对象,必须包含query字段(如果有变量还要加variables),比如正确的格式应该是:{ "query": "query { getUser(id: 1) { name email } }", "variables": {} }如果你直接在
data.json里写了纯GraphQL查询字符串(比如query { getUser(id:1) {name} }),甚至是开头带'G'的错误内容(比如GraphQL query { ... }),服务端解析JSON时就会在开头遇到非JSON语法的'G',直接报错。验证
data.json的JSON语法合法性
可以用本地工具快速校验JSON语法,比如在终端运行:jq . data.json如果
jq报错,说明你的JSON有语法问题——比如引号不配对、缺少逗号、括号不闭合等,这些都会导致解析失败。用简化命令测试请求
先绕过data.json,直接用合法的JSON字符串发起请求,验证服务端是否正常:curl http://localhost:8080/v1/graphql -X POST -H "Content-Type: application/json" -d '{ "query": "query { __typename }" }'如果这个命令能正常返回结果,那问题肯定出在
data.json的内容上;如果还是报错,再检查服务端的配置或者路由是否正确。检查文件编码(小众但可能的坑)
如果是在Windows系统下保存的data.json,有可能带了UTF-8 BOM头——这种隐藏字符也会导致JSON解析失败。可以用文本编辑器(比如VS Code)将文件编码改成UTF-8 without BOM再试。
总结一下:这个错误的核心就是请求体不是合法的JSON,优先把data.json改成GraphQL要求的JSON结构,再校验语法,基本就能解决问题。
内容的提问来源于stack exchange,提问作者Wilkenson Francois

