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

Java使用graph-spqr库运行GraphQL触发Query failed to validate错误原因

错误原因

  • 字段名不匹配:你通过@GraphQLQuery(name="getStatus")显式声明了查询操作名为驼峰格式的getStatus,但执行查询时要么写成了全小写的getstatus,甚至像报错信息里那样漏掉了前缀直接写status,服务端无法识别对应查询操作。
  • 标量类型非法查询子字段:getStatus方法的返回值是String类型,属于GraphQL内置标量类型,不存在子字段,你在查询语句末尾加{status}尝试获取子字段,违反了Schema校验规则。
  • 可选规范问题:方法定义的id参数为String类型,查询中直接传数值123存在类型不匹配风险,规范写法需要用引号包裹为字符串值。

修复方法

  1. 仅查询状态值的场景,直接修正查询语句即可:
    调整字段名、删除多余的子字段查询、规范参数格式,把执行查询的代码修改为:
result = graphQL.execute("{ getStatus(id: \"123\") }");
  1. 若需要同时返回订单的多个属性(如status、price),可调整Resolver逻辑支持子字段查询:
    首先定义订单实体类:
public class Order {
    private String status;
    private Integer price;
    // 补充全参构造方法、对应属性的getter方法
}

修改Resolver中的查询方法:

@GraphQLQuery(name="getOrder")
public Order getOrder(@GraphQLArgument(name="id") String orderId) {
    return new Order("Example of status", 100);
}

此时可使用带子字段的查询语句:

result = graphQL.execute("{ getOrder(id: \"123\") { status, price } }");

内容的提问来源于stack exchange,提问作者blinkettaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:03