Как исключить мутации из узла Query root с помощью spqr? - PullRequest
1 голос
/ 25 января 2020

Я использую io.leangen.graphql.spqr версию библиотеки 0.9.6, и мне нужно исключить мутации из узла Query root в Do c.

Мой 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 выдает , но не может найти решение.

Пример узла запроса root ниже, я хочу исключить createBook:

enter image description here

Пока я хочу, чтобы узел Mutation root оставался нетронутым:

enter image description here

1 Ответ

1 голос
/ 28 января 2020

Это ошибка. Вы используете очень старую версию SPQR (февраль 2018 г.). Это было исправлено долгое время go. Пожалуйста, постарайтесь следить за выпусками как можно больше, так как многие вещи исправляются и улучшаются.

* можно обойти ошибку, настроив ResolverBuilder s, но Я бы не рекомендовал идти по этому пути.

Spring Starter (если даже имеет отношение к вам) в настоящее время отстает (пока не в последней версии SPQR), но я активно работаю над новым выпуском. Должно быть очень скоро.

Кстати, ваша установка имеет много избыточности. Можно упростить до:

val schema = GraphQLSchemaGenerator()
                .withOperationsFromSingleton(bookGraph)
                //replace with your own root package(s)
                .withBasePackages("com.example.graphql.spqr")
                .generate()
...