切换纯WebSocket后AWS AppSync GraphQL订阅返回非空类型错误
根因分析
这个问题是AWS AppSync两种订阅模式的底层逻辑差异导致的:
旧版MQTT over WebSockets模式下,订阅触发时AppSync会自动从对应数据源拉取完整对象返回给订阅端,哪怕mutation resolver只返回了部分字段也会自动补全,所以之前不会报错。
新版纯WebSocket订阅模式下,订阅端收到的字段完全来自mutation resolver返回的原始payload,AppSync不会再做自动补全,只要mutation返回的payload里缺了Schema定义的非空字段,就会触发你遇到的这类报错。
解决方法
- 优先检查
submitCommandmutation的resolver配置
确保resolver执行完成后返回的Command对象包含所有非空字段,包括自动生成的commandId、createdAt、status等字段。如果用的是DynamoDB数据源,要把PutItem操作的ReturnValues参数设置为ALL_NEW,保证插入操作后返回完整的新记录,而不是仅返回请求传入的字段。 - 核对WebSocket订阅请求的格式
确认你发送的订阅帧结构符合AppSync纯WebSocket协议规范:必须包含id、type、payload根字段,payload下要完整包含query、variables、operationName三个参数,不要漏传operationName或者写错变量层级。 - 快速校验方式:直接在AppSync控制台的查询界面发起相同的mutation操作,查看返回的payload是否包含所有必填字段,就能快速定位是不是resolver返回值的问题。
内容的提问来源于stack exchange,提问作者fcracker79
相关产品推荐
相关产品推荐

