有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SpringBoot如何为java联合生成graphql模式?

我的团队正计划使用阿波罗网关作为联盟。因此,我们需要以稍微不同的方式生成模式

我们能用你的神奇库制作出这样的东西吗

extend type User @key(fields: "id") {
  id: ID! @external
  reviews: [Review]
}

共 (1) 个答案

  1. # 1 楼答案

    是否要向类型添加一些字段和指令

    可以使用@GraphQLContext将外部方法附加为字段。或者甚至提供一个自定义的ResolverBuilder,返回额外的Resolver(这些稍后会映射到字段)。 要添加指令,可以创建带有@GraphQLDirective元注释的注释(示例请参见测试)。 最后,您当然可以为User提供一个自定义的TypeMapper,并完全控制该类型的映射方式

    例如,你可以做如下注释:

    @GraphQLDirective(locations = OBJECT)
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface Key {
        public String[] fields;
    }
    

    如果随后将此注释放置在类型上:

    @Key(fields = "id")
    public class User {
        @External //another custom annotation
        public @GraphQLId @GraphQLNonNull String getId() {...}
    }
    

    它将被映射为:

    type User @key(fields: "id") {
        id: ID! @external
    }
    

    我想你知道@GraphQLContext,但简而言之:

    //Some service class registered with GraphQLSchemaBuilder
    @GraphQLApi
    public class UserService {
    
        @GraphQLQuery
        public List<Review> getReviews(@GraphQLContext User user) {
            return ...; //somehow get the review for this user
        }
    }
    

    由于@GraphQLContext,类型User现在有一个review: [Review]字段(即使User类没有该字段)