仅含WebSocket的java graphqlspringbootstarter应用程序
我正在使用spring boot starter webflux 2.5.6和com构建一个graphql应用程序。graphql java kickstart:graphql spring启动程序:12.0.0。 此时,应用程序运行良好,因为com。graphql java kickstart很容易启动。 通过http请求,我可以调用查询并运行变体,甚至可以通过WebSocket上的订阅创建和获取更新
但对于我的应用程序,查询和变异也必须通过websocket运行
似乎在com中。graphql java kickstart:graphql spring启动程序您只能将订阅端点配置为websocket。 通过“extends Endpoint”和“@ServerEndpoint”添加额外的websocket完全没有效果
我还尝试添加自己的HandlerMapping:
@PostConstruct
public void init()
{
Map<String, Object> map = new HashMap<String, Object>(
((SimpleUrlHandlerMapping) webSocketHandlerMapping).getUrlMap());
map.put("/mysocket", myWebSocketHandler);
//map.put("/graphql", myWebSocketHandler);
((SimpleUrlHandlerMapping) webSocketHandlerMapping).setUrlMap(map);
((SimpleUrlHandlerMapping) webSocketHandlerMapping).initApplicationContext();
}
这似乎适用于/mysocket主题,但如何为/graphql启用它,似乎已经有一个处理程序正在侦听:
WARN 12168 --- [ctor-http-nio-2] notprivacysafe.graphql.GraphQL : Query failed to parse : ''
以及如何将websocket与GraphQLmutationResolver连接
# 1 楼答案
我解决这个问题的切入点是创建一个
RestController
,并将ServerWebExchange
连接到WebSocketService
中的WebSocketHandler
,如下所示:在这个原型状态中,
WebSocketHandler
还实现了Consumer
,调用它来处理每个WebSocketMessage
:该解决方案尚未涉及身份验证或会话处理等安全方面