如果您使用的是 graphql-java-tools 之类的库(似乎是这种情况),则需要 POJO,因为这是库从中获取其类型映射的地方。但是,如果您只是使用 graphql-java 本身,您可以以任何您喜欢的方式连接它——包括拥有一个全局解析器(即DataFetcher)。
有关如何执行此操作的想法,请参阅http://graphql-java.readthedocs.io/en/latest/schema.html#idl
你想要这样的东西:
SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();
File schemaFile = loadSchema("yourStudentSchema.graphqls");
TypeDefinitionRegistry typeRegistry = schemaParser.parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, wiring);
RuntimeWiring 是您挂钩解析器的地方,例如:
RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring()
// this uses builder function lambda syntax
.type("Query", typeWiring -> typeWiring
.dataFetcher("students", env -> fetchDataSomeHow(env)))
.build();
}
因此,您可以为每个调用 f 提供相同的DataFetcher实现,dataFetcher这就是您所追求的。graphql-java 本身对它的连接和实现方式不做任何假设,例如它不强制 POJO 或其他任何东西。