Java使用graph-spqr库运行GraphQL触发Query failed to validate错误原因
错误原因
- 字段名不匹配:你通过
@GraphQLQuery(name="getStatus")显式声明了查询操作名为驼峰格式的getStatus,但执行查询时要么写成了全小写的getstatus,甚至像报错信息里那样漏掉了前缀直接写status,服务端无法识别对应查询操作。 - 标量类型非法查询子字段:
getStatus方法的返回值是String类型,属于GraphQL内置标量类型,不存在子字段,你在查询语句末尾加{status}尝试获取子字段,违反了Schema校验规则。 - 可选规范问题:方法定义的
id参数为String类型,查询中直接传数值123存在类型不匹配风险,规范写法需要用引号包裹为字符串值。
修复方法
- 仅查询状态值的场景,直接修正查询语句即可:
调整字段名、删除多余的子字段查询、规范参数格式,把执行查询的代码修改为:
result = graphQL.execute("{ getStatus(id: \"123\") }");
- 若需要同时返回订单的多个属性(如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
相关产品推荐
相关产品推荐

