GraphQL java中的GraphQL模式定义语言支持

GraphQL java中的GraphQL模式定义语言支持,graphql,graphql-java,Graphql,Graphql Java,嗨,我是graphql新手,特别是graphql java 在GraphQL java中是否有任何可能的方法使用GraphQL模式定义语言支持?如果是,那么它是如何可能的?是的,它是可能的,因为版本3.0.0 schema { query: QueryType } type QueryType { hero(episode: Episode): Character human(id : String) : Human droid(id: ID!): Droid

嗨,我是graphql新手,特别是graphql java


在GraphQL java中是否有任何可能的方法使用GraphQL模式定义语言支持?如果是,那么它是如何可能的?

是的,它是可能的,因为
版本3.0.0

schema {
    query: QueryType
}

type QueryType {
    hero(episode: Episode): Character
    human(id : String) : Human
    droid(id: ID!): Droid
}
您可以将以下IDL文件(starWarsSchema.graphqls)转换为可执行的模式,如下所示:

SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();

File schemaFile = loadSchema("starWarsSchema.graphqls");

TypeDefinitionRegistry typeRegistry = schemaParser.parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, wiring);
您还必须实现
buildRuntime
函数,以将静态模式与解析器连接起来

RuntimeWiring buildRuntimeWiring() {
    return RuntimeWiring.newRuntimeWiring()
            .scalar(CustomScalar)
            .type("QueryType", typeWiring -> typeWiring
                    .dataFetcher("hero", new StaticDataFetcher(StarWarsData.getArtoo()))
                    .dataFetcher("human", StarWarsData.getHumanDataFetcher())
                    .dataFetcher("droid", StarWarsData.getDroidDataFetcher())
            )
            .build();
}

您可以在中找到更详细的示例

谢谢你的回复。我也尝试过这个,但是他们在maven存储库中提供的最新jar在此不受支持。我认为这是由于最新jar中缺少部分代码造成的。不支持SchemaGenerator文件。您能验证一下吗?它适用于最新版本3.0.0。确保你有这个版本。可能以前会显式运行
mvn clean
。有人知道您是否可以在idl中使用注释和描述吗?