springboot集成graphql(三)

背景:基于上篇 springboot集成graphql(二)继续

graphql关于枚举、接口的操作

参考文章:https://www.graphql-java.com/documentation/v13/schema/

https://github.com/graphql-java/graphql-java

参考内容:https://github.com/graphql-java/graphql-java/search?q=StarWarsData&unscoped_q=StarWarsData

一、文件修改

1.1 在资源文件夹src/main/resources目录下创建starWarsSchema.graphqls文件

enum Episode {
    NEWHOPE
    EMPIRE
    JEDI
}

interface Character {
    id: ID!
    name: String!
    friends: [Character]
    appearsIn: [Episode]!
}

type Human implements Character {
    id: ID!
    name: String!
    friends: [Character]
    appearsIn: [Episode]!
    homePlanet: String
}

type Droid implements Character {
    id: ID!
    name: String!
    friends: [Character]
    appearsIn: [Episode]!
    primaryFunction: String
}

1.2 schema.graphqls文件中type Query修改添加3个方法,修改后的部分内容为

type Query {
    bookById(id: ID): Book
    companyById(id: ID): Company
    hero(episode: Episode): Character
    human(id : String) : Human
    droid(id: ID!): Droid
}

二、分别创建对应的类

2.1 枚举类EpisodeEnum

package com.zsx.entity;

public enum EpisodeEnum {

    NEWHOPE(4), EMPIRE(5), JEDI(6);

    private EpisodeEnum(Integer value) {
        this.value = value;
    }

    private Integer value;

    public Integer getValue() {
        return value;
    }

    public static EpisodeEnum getEpisodeEnum(Integer value) {
        for(EpisodeEnum episodeEnum : EpisodeEnum.values()){
            if(value.equals(episodeEnum.getValue())){
                return episodeEnum;
            }
        }
        return null;
    }
}

2.2 接口类Character

package com.zsx.graphql;

import java.io.Serializable;
import java.util.List;

public interface Character extends Serializable {

    String getId();

    String getName();

    List<String> getFriends();

    List<Integer> getAppearsIn();

}

2.2 实体类Human

package com.zsx.entity;

import com.zsx.graphql.Character;

import java.util.List;

public class Human implements Character {
    final String id;
    final String name;
    final List<String> friends;
    final List<Integer> appearsIn;
    final String homePlanet;

    public Human(String id, String name, List<String> friends, List<Integer> appearsIn, String homePlanet) {
        this.id = id;
        this.name = name;
        this.friends = friends;
        this.appearsIn = appearsIn;
        this.homePlanet = homePlanet;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<String> getFriends() {
        return friends;
    }

    public List<Integer> getAppearsIn() {
        return appearsIn;
    }

    public String getHomePlanet() {
        return homePlanet;
    }

    @Override
    public String toString() {
        return "Human{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

2.3 实体类Droid

package com.zsx.entity;

import com.zsx.graphql.Character;

import java.util.List;

public class Droid implements Character {
    final String id;
    final String name;
    final List<String> friends;
    final List<Integer> appearsIn;
    final String primaryFunction;

    public Droid(String id, String name, List<String> friends, List<Integer> appearsIn, String primaryFunction) {
        this.id = id;
        this.name = name;
        this.friends = friends;
        this.appearsIn = appearsIn;
        this.primaryFunction = primaryFunction;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<String> getFriends() {
        return friends;
    }

    public List<Integer> getAppearsIn() {
        return appearsIn;
    }

    public String getPrimaryFunction() {
        return primaryFunction;
    }

    @Override
    public String toString() {
        return "Droid{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

2.4 DataFetcher数据类StarWarsData

package com.zsx.graphql;

import com.zsx.entity.Droid;
import com.zsx.entity.EpisodeEnum;
import com.zsx.entity.Human;
import graphql.schema.DataFetcher;
import graphql.schema.TypeResolver;
import graphql.schema.idl.EnumValuesProvider;

import java.util.ArrayList;
import java.util.List;

import static java.util.Arrays.asList;

public class StarWarsData {


    static Human luke = new Human(
            "1000",
            "Luke Skywalker",
            asList("1002", "1003", "2000", "2001"),
            asList(4, 5, 6),
            "Tatooine"
    );

    static Human vader = new Human(
            "1001",
            "Darth Vader",
            asList("1004"),
            asList(4, 5, 6),
            "Tatooine"
    );

    static Human han = new Human(
            "1002",
            "Han Solo",
            asList("1000", "1003", "2001"),
            asList(4, 5, 6),
            null
    );

    static Human leia = new Human(
            "1003",
            "Leia Organa",
            asList("1000", "1002", "2000", "2001"),
            asList(4, 5, 6),
            "Alderaan
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值