不使用别名时出现FieldsConflict类型的graphql验证错误

Posted

技术标签:

【中文标题】不使用别名时出现FieldsConflict类型的graphql验证错误【英文标题】:graphql Validation error of type FieldsConflict coming when alias is not used 【发布时间】:2019-07-09 09:14:11 【问题描述】:

当我在请求中未使用别名时,我收到错误“FieldsConflict 类型的验证错误”。请确认这是预期的还是有解决方法


    person(search: [firstname: "DAN", lastname: "WATLER", country: "FRANCE"])
     
        firstname
        lastname
        country
        age
        address      
    

    person(search: [firstname: "FRANK", lastname: "TEE", country: "FRANCE"])
     
        firstname
        lastname
        country
        age
        address      
    

上面的代码给出了验证错误,但是如果我使用下面显示的别名,则不会出现错误并且我得到了成功的响应。

我不想使用别名,如果有任何解决方法,请提出建议。 谢谢!


    dan: person(search: [firstname: "DAN", lastname: "WATLER", country: "FRANCE"])
     
        firstname
        lastname
        country
        age
        address      
    

    frank: person(search: [firstname: "FRANK", lastname: "TEE", country: "FRANCE"])
     
        firstname
        lastname
        country
        age
        address      
    

【问题讨论】:

【参考方案1】:

通常GraphQL 将数据作为 JSON 对象返回,并且在 JSON 文档中不可能有 2 个(有效)对象具有相同的键(在您的情况下为 person)。因此,几乎不可能实现您所描述的。

您的第一个查询的结果是这样的:


  "data": 
    "person": 
      "firstname": "DAN",
      ...
    ,
    "person":  // this is not valid
      "firstname": "FRANK"
      ...
    
  

这就是为什么你必须使用alias

另一种选择是查看 GraphQL 服务器是否有一个返回 person 列表的查询,结果是否在数组中,例如:


  "data": [
    
      "firstname": "DAN",
      ...
    ,
    
      "firstname": "FRANK",
      ...
    
  [

【讨论】:

以上是关于不使用别名时出现FieldsConflict类型的graphql验证错误的主要内容,如果未能解决你的问题,请参考以下文章

mybatis和spring整合时出现的问题,不能注册别名

使用 qmake 构建项目时出现“不支持的构建类型”

使用 ORDER BY 时出现数据类型不匹配错误

使用 %s 时出现不支持的操作数类型错误

将 std::vector 与结构一起使用时出现不完整的类型错误

使用从 Kotlin 数据类生成的代码时出现“不兼容的类型”错误