我使用io.leangen.graphql.spqr
库版本0.9.6
,并且需要将Query
根节点中的突变排除到文档中。
我的GraphQLController.kt
看起来是这样的:
@RestController
class GraphQLController {
private var graphQL: GraphQL? = null
@Autowired
fun GraphQLController(bookGraph: BookGraph) {
val schema = GraphQLSchemaGenerator()
.withResolverBuilders(
AnnotatedResolverBuilder(),
PublicResolverBuilder("com.example.graphql.spqr"))
.withOperationsFromSingleton(bookGraph)
.withValueMapperFactory(JacksonValueMapperFactory())
.generate()
graphQL = GraphQL.newGraphQL(schema)
.build()
}
@PostMapping(value = ["/graphql"], consumes = [MediaType.APPLICATION_JSON_UTF8_VALUE], produces = [MediaType.APPLICATION_JSON_UTF8_VALUE])
@ResponseBody
fun execute(@RequestBody request: Map<String?, Any?>): ExecutionResult? {
return graphQL!!.execute(ExecutionInput.newExecutionInput()
.query(request["query"] as String?)
.variables(request["variables"] as Map<String, Object>?)
.operationName(request["operationName"] as String?)
.build())
我的
BookGraph.kt
看起来是这样的:@Component
class BookGraph {
@Autowired
private lateinit var bookService: BookService
@GraphQLQuery(name = "books")
fun books() : List<Book> {
return bookService.findAll()
}
@GraphQLMutation(name = "createBook")
fun createBook(@GraphQLInputField(name = "name") name: String) : Book {
return bookService.findAll()
}
}
我该怎么做?
我在StackOverflow和SPQR issues中搜索了可能的解决方案,但找不到解决方案。
下面的查询根节点示例,我想排除
createBook
:虽然我希望Mutation根节点保持不变:
最佳答案
是虫子您正在使用非常旧的SPQR版本(2018年2月)。这个问题已经很久了。由于许多问题已得到修复和改进,因此请尽量遵循发行版。
可以通过自定义ResolverBuilder
来解决该错误,但是我不建议您采用这种方法。
Spring Starter(甚至与您无关)目前处于滞后状态(尚未在最新的SPQR版本上),但是我正在积极开发新版本。应该很快出来。
顺便说一句,您的设置有很多冗余。可以简化为:
val schema = GraphQLSchemaGenerator()
.withOperationsFromSingleton(bookGraph)
//replace with your own root package(s)
.withBasePackages("com.example.graphql.spqr")
.generate()