错误:使用 Graphql 在 Spring Boot 中不可为空的类型是“ID”

Posted

技术标签:

【中文标题】错误:使用 Graphql 在 Spring Boot 中不可为空的类型是“ID”【英文标题】:Error : The non-nullable type is 'ID' in Spring Boot with the usage of Graphql 【发布时间】:2021-08-17 12:20:16 【问题描述】:

我刚刚设计了一个使用 GraphqlSpring Boot 示例。

我尝试通过 id 更新 部门,但在 id 部分出现错误。

这是我的错误消息,如下所示。

The field at path '/updateDepartment/hospital/id' was declared as a non null type, but the code involved in retrieving data has wrongly returned a null value.  The graphql specification requires that the parent field be set to null, or if that is non nullable that it bubble up null to its parent and so on. The non-nullable type is 'ID' within parent type 'Hospital'

这是我的 mutation查询变量 sn-ps,如下所示。

mutation updateDepartment($departmentInput: DepartmentInput!) 
  updateDepartment(id: 10,department: $departmentInput)
    name
    hospital
      id
    
  



  "departmentInput": 
    "name": "Department 10 Update",
    "hospitalId": 3
  

这是我的项目链接:Project Link

我该如何解决这个错误?

【问题讨论】:

我无法重现您的异常。我已经从 GitHub 下载了你的源代码,一切正常。 @DanielWosch 我通过不在 updateDepartment 函数中查询医院/id 来避免错误,因为您可以看到我的答案。 我查询了医院ID,没有收到错误:mutation updateDepartment updateDepartment( id: 10, department: hospitalId: 2 name: "test12" ) name, hospital id @DanielWosch 您应该使用DepartmentInput 而不是定义其变量。 相同的行为:imgur.com/jZRekLh 您在发布的示例中是否遗漏了什么? 【参考方案1】:

这是我的解决方案

变异

mutation updateDepartment($departmentInput: DepartmentInput!) 
  updateDepartment(id: 10,department: $departmentInput)
    name
  

查询变量


  "departmentInput": 
    "name": "Department 10 Update",
    "hospitalId": 3
  

【讨论】:

看起来您只是通过不查询医院/身份证来避免错误。要解决此问题,请确保医院/id 存在(不为空)并且可用于返回所有可能的输入,或者通过更新架构使该字段可为空。 @MatG 我该如何解决这个问题?能不能写出你说的那个代码? @MatG 你能帮我解决我的问题吗? 您可以在从解析器返回之前记录部门并检查是否所有值都正确返回。 @MatG 当我更新它时它会抛出 ***error 错误

以上是关于错误:使用 Graphql 在 Spring Boot 中不可为空的类型是“ID”的主要内容,如果未能解决你的问题,请参考以下文章

错误:使用 Graphql 在 Spring Boot 中不可为空的类型是“ID”

使用graphql-java-tools和graphql-spring-boot-starter处理错误。

GraphQL - 如何捕获“内部”Apollo/GraphQL 错误 - Java Spring Boot

GraphQL - 架构错误:

404-not-found-while-running-spring-boot-rest-api

如何使用 graphql-spring-boot 向 GraphQL Java 添加检测?