背景:基于上篇 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", "100