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

如何在GraphQL中定义可空的自定义JSON标量类型?

问题解决:GraphQL自定义标量serialize返回null报错

问题描述

自定义的JsonType标量在GraphQL 16版本中触发报错:

{"errors":[{"message":"Expected JsonType.serialize(\"null\") to return non-nullable value, returned: null"}]}

该标量原本支持从Buffer或字符串解析,在GraphQL 16之前可正常工作,但核心代码改动后,serialize()不再允许返回null。

推荐处理方案

  • 修改自定义标量的serialize方法
    当需要处理null值时,返回合法的非null JSON表示,比如JSON.stringify(null)或"null"字符串,确保方法始终返回非null结果。示例代码:
    serialize(value) {
      if (value === null) {
        return JSON.stringify(null);
      }
      // 原有Buffer/字符串解析逻辑
      if (value instanceof Buffer) {
        return value.toString();
      }
      return JSON.stringify(value);
    }
    
  • 调整Schema的类型定义
    如果业务逻辑允许该标量字段为null,在Schema定义中标记该标量为nullable(不要添加!)。这样GraphQL会允许字段本身为null,无需在serialize中返回null值。
  • 放弃全局Schema包装器方案
    不建议用包装器修改所有嵌套结构,这种方式会大幅提升维护成本,优先修改标量自身逻辑或调整Schema的nullable配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:05:54