问题描述
我已经在MicroProfile容器(WildFly)中部署了一个Mutation,并且能够在GraphQL UI中执行它:
mutation Add {
createOrder(order: {
id: 1,type: "car"
model: "Ferrari"
price: 500
}
)
{
type
model
price
}
}
但是,当我尝试使用cURL执行相同的突变时:
curl \
-X POST \
-H "Content-Type: application/json" \
--data '{ "query": "mutation Add {
createOrder(order: {
id: 1,type: \"car\"
model: \"Ferrari\"
price: 500
}
)
{
type
model
price
}
}
" }' http://localhost:8080/demo/graphql
但是它失败了:
javax.json.stream.JsonParsingException: Unexpected char 10 at (line no=1,column no=27,offset=26)
我还没有发现使用cURL之类的命令行工具运行Mutation的许多示例,也不知道错误在哪里。有什么帮助吗? 谢谢
解决方法
您正在通过curl发送json数据,并且Json规范不允许换行。它们需要替换为'\ n'字符。
curl \
-X POST \
-H "Content-Type: application/json" \
--data '{ "query": "mutation Add { createOrder(order: {id: 1,type: \"car\",model: \"Ferrari\",price: 500}){type\n model\n price\n}}" }' http://localhost:8080/demo/graphql
请参阅此问题以获取其他建议:Correct format for multiline '--data' in curl query to graphql endpoint?
,这里我有一个使用 curl、换行引号转义和缩进的工作突变。它确实看起来并不花哨,但比 oneliner 更易于维护:https://stackoverflow.com/a/65837497/835098
我已经重新格式化了您的 curl 调用,现在应该可以使用了。注意输入和输出参数很好地缩进了你的变异。您只需担心在每行末尾添加反斜杠并转义“查询”字符串中的反斜杠和引号。
哦,不要忘记在每个输入参数后添加逗号。我认为您的原始请求中缺少这些内容。
curl \
-X POST \
-H "Content-Type: application/json" \
--data \
"{ \
\"query\": \"mutation Add { \
createOrder(order: { \
id: 1,\
type: \\\"car\\\",\
model: \\\"Ferrari\\\",\
price: 500 \
}){ \
type \
model \
price \
} \
} \
} \
" http://localhost:8080/demo/graphql