【发布时间】:2020-12-19 21:56:16
【问题描述】:
我浏览了很多文章和博客,以找到运行以下内容的正确方法。我已经实现了以下目标:
- Spring Boot 应用程序 - 工作
- 命令式 Spring Data MongoDB 连接到我的 Mongo Atlas 集群 - 有效
- Spring GraphQL Starter 实现(解析器等) - 有效
现在我想实现我的最后一个要求。为了让 GraphQL 订阅正常工作,我需要集成 Spring Data MongoDB Reactive 依赖项并为订阅创建一个新的 GraphQL Resolver。这是我添加到已经运行的应用程序中的代码(希望代码片段能提供足够的信息来帮助我)。
Gradle.kt
implementation("org.springframework.boot:spring-boot-starter-data-mongodb-reactive")
MyApp.kt
@SpringBootApplication
@EnableReactiveMongoRepositories(basePackages = ["com.myapp"])
@EnableMongoRepositories(basePackages = ["com.myapp"])
class MyApp
fun main(args: Array<String>) {
runApplication<MyApp>(*args)
}
SubscriptionResolver.kt
@Component
class SubscriptionResolver(
private val characterReactiveRepository: CharacterReactiveRepository
) : GraphQLSubscriptionResolver {
fun allCharacters(): Flux<Character> {
return characterReactiveRepository.findAll()
}
}
CharacterReactiveRepository.kt
interface CharacterReactiveRepository : ReactiveMongoRepository<Character, String>
character.graphqls
type Subscription {
allCharacters: [Character]!
}
错误
SchemaClassScannerError: Unable to match type definition (NonNullType{type=ListType{type=TypeName{name='Character'}}}) with java type (reactor.core.publisher.Flux<com.backend.domain.Character>): Java class is not a List or generic type information was lost: reactor.core.publisher.Flux<com.backend.domain.Character>
详细异常
编辑 1
@Component
class SubscriptionResolver(
private val characterReactiveRepository: CharacterReactiveRepository
) : GraphQLSubscriptionResolver {
fun allCharacters(): Publisher<Character> {
return characterReactiveRepository.findAll()
}
}
【问题讨论】:
标签: mongodb spring-boot kotlin graphql