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

时间:2020-01-25 18:15:06

标签: kotlin graphql graphql-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()
    }
}

我该怎么办?

我在StackOverflow和SPQR issues中都搜索了可能的解决方案,但找不到解决方案。

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

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:1)

是错误。您使用的是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()