Java:GraphQL 极佳入门实例

濮阳烨然
2023-12-01

学习一种新知识总是希望有个很简单但是有很全面的小demo。

GraphQL官方文档:http://graphql.org/learn/
这里就不介绍它是用来干什么的了。

创建实体类

public class Person {

  private int id;
  private String name;
  private String password;
  private List<Dog> dogs;
}

public class Dog {

  private int id;
  private String name;
  private int age;
}

创建数据源

[
  {
    "id": 1,
    "name": "Irene",
    "password": "123456",
    "dogs": [
      {
        "id": 1,
        "name": "hello",
        "age": 5
      },
      {
        "id": 2,
        "name": "world",
        "age": 6
      }
    ]
  },
  {
    "id": 2,
    "name": "Aiden",
    "password": "123456",
    "dogs": [
      {
        "id": 3,
        "name": "hello",
        "age": 5
      },
      {
        "id": 4,
        "name": "world",
        "age": 6
      }
    ]
  }
]

这里直接上运行代码了。

package com;

import static graphql.Scalars.GraphQLInt;
import static graphql.Scalars.GraphQLString;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import graphql.GraphQL;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author yemingfeng
 */
public class MainClass {

  private static List<Person> persons;

  public static void main(String[] args) throws IOException {
    init();

    GraphQLObjectType dogType = newObject()
        .name("dog")

        .field(newFieldDefinition()
            .name("id")
            .type(GraphQLInt))

        .field(newFieldDefinition()
            .name("name")
            .type(GraphQLString))

        .field(newFieldDefinition()
            .name("age")
            .type(GraphQLInt))

        .build();

    GraphQLObjectType personType = newObject()
        .name("person")

        .field(newFieldDefinition()
            .name("id")
            .type(GraphQLInt))

        .field(newFieldDefinition()
            .name("name")
            .type(GraphQLString))

        .field(newFieldDefinition()
            .name("password")
            .type(GraphQLString))

        .field(newFieldDefinition()
            .name("dogs")
            .type(new GraphQLList(dogType)))

        .build();

    GraphQLFieldDefinition personDefinition =
        GraphQLFieldDefinition.newFieldDefinition()
            .name("person")
            .type(personType)
            .argument(GraphQLArgument.newArgument().name("id").type(GraphQLInt))
            .dataFetcher(new DataFetcher() {
              public Object get(DataFetchingEnvironment dataFetchingEnvironment) {
                int id = dataFetchingEnvironment.getArgument("id");
                for (Person person : persons) {
                  if (person.getId() == id) {
                    return person;
                  }
                }
                return null;
              }
            })
            .build();

    GraphQLSchema schema = GraphQLSchema.newSchema()
        .query(newObject()
            .name("personQuery")
            .field(personDefinition)
            .build())
        .build();

    GraphQL graphQL = GraphQL.newGraphQL(schema).build();

    System.out.println(graphQL.execute("{person(id:1){id,name,dogs{id}}}").getData());
    System.out.println(graphQL.execute("{person(id:2){id,name,dogs{id,name}}}").getData());
    System.out.println(graphQL.execute("{person(id:3){id,name,dogs{id,name,age}}}").getData());
  }

  private static void init() throws IOException {
    InputStream inputStream = MainClass.class.getClassLoader().getResourceAsStream("person.json");
    byte[] bytes = new byte[1024];
    int length;
    StringBuilder stringBuilder = new StringBuilder();
    while ((length = inputStream.read(bytes)) != -1) {
      stringBuilder.append(new String(bytes, 0, length));
    }

    persons = new Gson()
        .fromJson(stringBuilder.toString(),
            new TypeToken<ArrayList<Person>>() {
            }.getType()
        );
  }
}

运行结果:

{person={id=1, name=Irene, dogs=[{id=1}, {id=2}]}}
{person={id=2, name=Aiden, dogs=[{id=3, name=hello}, {id=4, name=world}]}}
{person=null}
 类似资料: