Spring Boot GraphQL не может загрузить схему - PullRequest
0 голосов
/ 27 февраля 2019

Я использую следующий пример с Spring Boot 2+ и GraphQL, но я получаю сообщение об ошибке ниже при загрузке graphiql, схема не загружается.

https://github.com/TechPrimers/spring-boot-graphql-query-example

код работает через вызов POST от почтальона, но из Graphiql.

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Вам нужно создать свой собственный объект со свойствами query, operationName и arg.

public class Data {
    private String query;

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }
}

@PostMapping("/graphql")
public ExecutionResult graphQl(@RequestBody Data query) {
    ExecutionResult result = graphQLService.getGraphQL().execute(query.getQuery());
    return result;
}
0 голосов
/ 28 февраля 2019

Во-первых, вы используете странный стек.Хотя graphql-java-tools до недавнего времени жил в com.graphql-java groupId в Maven, на самом деле это совершенно отдельный стек.Более свежие выпуски публикуются под новым groupId com.graphql-java-kickstart, чтобы избежать путаницы в будущем.

Теперь, если вы уже используете graphql-java-tools, вам нужен стартер com.graphql-java-kickstart:graphql-spring-boot-starter, так как он предназначен дляиспользовать вместе.

Используемый стартер (com.graphql-java:graphql-spring-boot-starter) предназначен для использования с чистым graphql-java.Вам просто нужно подключить бин типа GraphQL.См. официальный учебник для более подробной информации.

Они могут быть созданы для совместной работы, учтите, это просто неоптимальная комбинация.

Теперьпричина, по которой вы получаете эту ошибку, заключается в том, что ваша конечная точка HTTP (Spring Controller) не соответствует спецификации GraphQL-over-HTTP , и GraphiQL ожидает, что (в частности, GraphiQL использует * 1023)* POST сорт ).Почтальон нет, поэтому он проходит.

Лучший способ изменить ваш бэкэнд, чтобы ожидать JSON-объект в запросе, со следующей формой:

{
  "query": "...",
  "operationName": "...",
  "variables": { "myVariable": "someValue", ... }
}
...