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

GraphQL非空字段返回null错误求助(Spring Boot环境)

GraphQL非空字段返回Null问题解决

问题现象

发起带参数的GraphQL查询后,收到如下错误:

{
    "errors": [
        {
            "message": "路径'/greeting/name'处的字段被声明为非空类型,但获取数据的代码错误地返回了null值。GraphQL规范要求父字段设为null,若父字段也非空则向上传递null。该非空类型是Person类型下的String",
            "path": [
                "greeting",
                "name"
            ],
            "extensions": {
                "classification": "NullValueInNonNullableField"
            }
        }
    ],
    "data": {
        "greeting": null
    }
}

相关代码

Schema定义

type Person{
    name: String
} 
type Query {
    greeting(name: String!): Person
}

控制器代码

@Controller
public class TestGraphController {

    @QueryMapping
    public String greeting(@Argument String name){
        System.out.println("\n\nrequest-> " + name);
        return "Hello, " + name;
    }
}

查询请求

query {
  greeting(name: "Test") {
      name
    }
}

错误原因

Schema中greeting查询定义返回Person类型,但控制器方法实际返回的是String类型,两者不匹配。GraphQL执行查询时,期望从greeting获取Person对象并读取其name字段,但实际得到的字符串没有name属性,导致返回null,触发非空字段错误。

解决方案

提供两种可行方案,根据需求选择:

方案一:调整控制器返回Person对象

  1. 创建Person实体类:
public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
  1. 修改控制器方法,返回Person实例:
@Controller
public class TestGraphController {

    @QueryMapping
    public Person greeting(@Argument String name){
        System.out.println("\n\nrequest-> " + name);
        return new Person("Hello, " + name);
    }
}

修改后执行原查询,即可得到正确结果:

{
    "data": {
        "greeting": {
            "name": "Hello, Test"
        }
    }
}

方案二:调整Schema让greeting直接返回String

  1. 修改Schema定义:
type Query {
    greeting(name: String!): String
}
  1. 修改查询请求,直接获取返回值:
query {
  greeting(name: "Test")
}

执行后结果为:

{
    "data": {
        "greeting": "Hello, Test"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:28:27