如何在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
相关产品推荐
相关产品推荐

