Сборщик статических данных возвращает ноль (GraphQL / Java) - PullRequest
0 голосов
/ 20 июня 2019

У меня следующий простой пример схемы / запроса с программным созданием схемы на Java. Здесь я пытаюсь создать следующую схему:

query{
  board {
   name: string
 }
}

Код:

GraphQLObjectType queryType = GraphQLObjectType.newObject()
                .name("BoardQuery")
                .field(GraphQLFieldDefinition.newFieldDefinition()
                        .name("board")
                        .type(GraphQLObjectType.newObject().name("boardType")
                        .field(GraphQLFieldDefinition.newFieldDefinition()
                                .name("name")
                                .type(GraphQLString).build()))

                        .build())

                .build();

        GraphQLCodeRegistry graphQLCodeRegistry = GraphQLCodeRegistry.newCodeRegistry()
                .dataFetcher(FieldCoordinates.coordinates("boardType","name"),
                        new StaticDataFetcher("hello")).build();
        GraphQLSchema graphQLSchema = GraphQLSchema.newSchema()
                .query(queryType)
                .codeRegistry(graphQLCodeRegistry)
                .build();
        GraphQL graphQl = GraphQL.newGraphQL(graphQLSchema).build();
        ExecutionResult executionResult = graphQl.execute("query { board { name } }");
        System.out.println(executionResult.getData().toString());

Ожидаемый результат:

{name:hello}

Фактический объем производства:

{name:null}

Я что-то здесь упускаю?

1 Ответ

1 голос
/ 21 июня 2019

Я сам новичок в этом, но в этом я попробую.

    //The dataFetcher used to fetch a board object.
    DataFetcher boardDataFetcher() {
        return environment -> {
            Object board = new Object() {
                String name = "board Name";
            };
            return board;
        };
    }
    //Your deffinition of what a board type contains/what of the board type you want to expose
    public GraphQLObjectType boardType = newObject()
            .name("boardType")
            .field(newFieldDefinition()
                    .name("name")
                    .type(GraphQLString)
            )
            .build();
    // Define your query types 
    public GraphQLObjectType queryType = newObject()
            .name("Query")
            .field(newFieldDefinition()
                    .name("board")
                    .type(boardType)
            )
            .build();

    // wire the query, board and datafetcher together
    public GraphQLCodeRegistry codeRegistry = newCodeRegistry()
            .dataFetcher(
                    coordinates("Query", "board"), boardDataFetcher()
            )
            .build();
    //create the schema
    GraphQLSchema graphQLSchema = GraphQLSchema.newSchema()
            .query(queryType)
            .codeRegistry(codeRegistry)
            .build();

Это работает с запросом типа

board{name}

Должен дать вам ответ:

"board": {
      "name": "board Name"
    }
...