如何使用 spqr 从查询根节点中排除突变?

How to exclude mutations from Query root node with spqr?

我使用 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()
    }
}

我该怎么做?

我在 Whosebug 和 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()