目录
解释:
- GraphQLResolver接口是Java程序中实现GraphQL解析的接口,通常用来为GraphQL schema中定义的类型提供自定义的解析方法。
- java中GraphQLResolver接口是用于定义GraphQL查询和变异的解析器,因此在query和mutation时都会被调用。
- 相当于在向前端响应数据前一刻数据进行拦截,并通过变量名去寻找与之相同的方法名,执行与变量名相同的方法,解析数据
举个例子:
执行查询请求:
控制台打印数据:
解释:
- 有两个解析器,Student类型解析器(Student Resolver),Classes类型解析器(ClassesResolver)。
- 返回的数据类型为Student类型,Student类中有Classes类型的变量。
- 因为Classes类是Student类的成员变量,所以会执行Student类型解析器(Student Resolver),后执行Classes类型解析器(ClassesResolver)。
代码:
/**
* GraphQLResolver接口是Java程序中实现GraphQL解析的接口,通常用来为GraphQL schema中定义的类型提供自定义的解析方法。
* java中GraphQLResolver接口是用于定义GraphQL查询和变异的解析器,因此在query和mutation时都会被调用。
* <p>
* 相当于在向前端响应数据前一刻对Student类型的数据进行拦截,并通过变量名去寻找与之相同的方法名,执行与变量名相同的方法
* 方法的返回类型必须是与之同名的变量,对应的数据类型,方法必须要用参数,且参数只能为Student类型
* 方法不能为private类型
* <p>
* 可以在此类中对懒加载的数据进行处理
*/
@Component
public class StudentResolver implements GraphQLResolver<Student> {
/**
* 该方法名要与Student类中id相同,返回类型要与id变量类型相同,且参数类型必须是Student,方法不能为private类型
*/
public String id(Student student) {
System.out.println("StudentResolver--->student--->id: " + student.getId());
return student.getId();
}
/**
* 该方法名要与Student类中Classes的变量名相同,且参数类型必须是Student,方法不能为private类型
*/
public Classes classes(Student student) {
System.out.println("StudentResolver--->student--->classes: " + student.getClasses());
return student.getClasses();
}
}
/**
* GraphQLResolver接口是Java程序中实现GraphQL解析的接口,通常用来为GraphQL schema中定义的类型提供自定义的解析方法。
* java中GraphQLResolver接口是用于定义GraphQL查询和变异的解析器,因此在query和mutation时都会被调用。
* <p>
* 相当于在向前端响应数据前一刻对Classes类型的数据进行拦截,并通过变量名去寻找与之相同的方法名,执行与变量名相同的方法
* 方法的返回类型必须是与之同名的变量,对应的数据类型,方法必须要用参数,且参数只能为Classes类型
* 方法不能为private类型
* <p>
* 可以在此类中对懒加载的数据进行处理
*/
@Component
public class ClassesResolver implements GraphQLResolver<Classes> {
/**
* 该方法名要与Classes类中id相同,返回类型要与id变量类型相同,且参数类型必须是Classes,方法不能为private类型
*/
public String id(Classes classes) {
System.out.println("ClassesResolver--->classes--->id: " + classes.getId());
return classes.getId();
}
/**
* 该方法名要与Classes类中name相同,返回类型要与name变量类型相同,且参数类型必须是Classes,方法不能为private类型
*/
public String name(Classes classes) {
System.out.println("ClassesResolver--->classes--->name: " + classes.getName());
return classes.getName();
}
}
@Data
public class Student {
private String id;
private String name;
private SexEnum sex;
private LocalDateTime birthday;
private Classes classes;
}
@Data
public class Classes {
private String id;
private String name;
}
@Getter
public enum SexEnum {
/**
* 男
*/
MALE("男"),
/**
* 女
*/
FEMALE("女");
SexEnum(String sex) {
this.sex = sex;
}
private final String sex;
}
完整代码地址:
GitHub - 3154834560/graphql_test