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

graphql-spring-boot-starter如何配置WebSocket支持执行Query与Mutation

解决方案

你不需要自行开发额外的WebSocket端点覆盖默认的/graphql路径,你用的com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0版本自带的WebSocket实现本身就已经支持在同一条WebSocket连接上执行Query、Mutation、Subscription三类操作,你之前的报错是因为自定义Handler覆盖了原生的协议处理逻辑,导致请求没有按GraphQL WebSocket协议解析,才出现空查询报错。

操作步骤

  1. 先删除你之前自定义的覆盖/graphql端点的HandlerMapping代码,保留框架原生的WebSocket配置。
  2. 检查项目配置文件,确认WebSocket开关已打开,路径和你要使用的/graphql保持一致:
graphql:
  websocket:
    enabled: true
    path: /graphql
    # 支持的GraphQL WebSocket协议,默认已包含以下两类
    protocols:
      - graphql-transport-ws
      - subscriptions-transport-ws
  1. 客户端调用时直接遵循GraphQL WebSocket协议发送请求即可,不需要区分操作类型:
  • 首先建立WebSocket连接,指定使用的协议为graphql-transport-ws
  • 连接建立后先发送初始化消息
  • 后续Query、Mutation、Subscription都使用相同的请求格式发送即可,框架会自动识别操作类型,调用你定义的GraphQLQueryResolver、GraphQLMutationResolver、GraphQLSubscriptionResolver执行对应逻辑,不需要你手动做Resolver关联。
调用示例(以wscat测试工具为例)

建立连接:

wscat -c ws://localhost:8080/graphql -p graphql-transport-ws

发送初始化消息:

{"type":"connection_init","payload":{}}

发送Query请求:

{"id":"test-query-1","type":"subscribe","payload":{"query":"query { listUser { id name } }"}}

发送Mutation请求:

{"id":"test-mutation-1","type":"subscribe","payload":{"query":"mutation { createUser(name: \"测试用户\") { id name } }"}}

执行完成后框架会自动返回对应结果,和HTTP调用的返回格式完全一致。

如果你确实需要自定义WebSocket的处理逻辑,不要完全替换原生的Handler,直接扩展框架自带的GraphQLWebsocketHandler织入你的自定义逻辑即可,避免重复实现整套GraphQL协议解析、执行逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:03