我正在尝试创建一个简单的Spring GraphQL订阅处理程序。
@Controller
public class GreetingController {
@QueryMapping
String sayHello() {
return "Hello!";
}
@SubscriptionMapping
Flux<String> greeting(@Argument int count) {
return Flux.fromStream(Stream.generate(() -> "Hello @ " + Instant.now()))
.delayElements(Duration.ofSeconds(1))
.take(count);
}
}
下面是GraphQL模式:
type Query {
sayHello: String
}
type Subscription {
greeting(count: Int): String
}
Spring配置:
spring:
graphql:
graphiql:
enabled: true
path: /graphiql
当我尝试使用spring托管的graphiql运行上述订阅时,收到以下错误:
{
"errors": [
{
"isTrusted": true
}
]
}
当我使用Postman运行相同的graphql请求时,我收到以下响应:
{
"data": {
"upstreamPublisher": {
"scanAvailable": true,
"prefetch": -1
}
}
}
是什么原因导致订阅不从我的控制器返回数据?
1条答案
按热度按时间zkure5ic1#
正如链接的GitHub问题中所解释的,订阅需要在持久传输连接中传输数据的能力--这是其他普通HTTP所不能提供的。
首先你需要在你的应用中启用WebSocket支持,GraphiQL UI应该透明地使用WebSocket传输。