1

我使用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 问题中都搜索了可能的解决方案,但找不到解决方案。

下面的查询根节点示例,我想排除createBook

在此处输入图像描述

虽然我希望 Mutation 根节点保持不变:

在此处输入图像描述

4

1 回答 1

1

这是错误。您使用的是非常旧版本的 SPQR(2018 年 2 月)。这在很久以前就已经修复了。请尝试尽可能多地关注这些版本,因为很多事情都在得到修复和改进。

可以通过自定义 s 来解决这个错误ResolverBuilder,但我不建议走这条路。

Spring Starter(如果甚至与您相关)目前落后(还没有最新的 SPQR 版本),但我正在积极开发新版本。应该很快就出来了。

顺便说一句,您的设置有很多冗余。可以简化为:

val schema = GraphQLSchemaGenerator()
                .withOperationsFromSingleton(bookGraph)
                //replace with your own root package(s)
                .withBasePackages("com.example.graphql.spqr")
                .generate()
于 2020-01-28T16:05:52.700 回答