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