【问题标题】:Kickstarter type dictionary equivalent in spring boot graphql starter在 Spring Boot graphql starter 中等效的 Kickstarter 类型字典
【发布时间】:2022-08-14 23:58:33
【问题描述】:

使用spring-boot-starter-graphql 时,Spring 使用简单的名称到类映射。例如。对于突变:

mutation {
  addCategory(id: 6, name: \"Green Fruits\", products: [8, 2, 3]) {
    name
    products {
      name
    }
  }
}

Spring 将检查名为 addCategory 的突变和名为 Product 的类。

graphql-java-kickstart 提供了一种方法来维护与该模式不匹配的类的字典: https://www.graphql-java-kickstart.com/tools/schema-definition/#type-dictionary

spring-boot-starter-graphql 有类似的东西吗?

Spring\'s TypeResolver 似乎适用于接口和联合

    标签: java graphql graphql-java spring-graphql


    【解决方案1】:

    没有这样的字典,但您可以覆盖默认行为并自定义类型解析器。

    假设你有这个 Graphql 模式

    type Product {
        sku: ID!
    }
    
    type Address {
        streetName: String
    }
    
    type Query {
        product(sku: ID!): Product
        addresses: [Address]
    }
    

    并且您想为 Product 使用不同的类名

    class ThisIsTheProduct {
        private String SKU;
    }
    

    您可以实现RuntimeWiringConfigurer 来注册类型和名称。

    @Configuration
    class GraphQlConfig implements RuntimeWiringConfigurer {
    
    
        @Override
        public void configure(RuntimeWiring.Builder builder) {
            ClassNameTypeResolver typeResolver = new ClassNameTypeResolver();
            typeResolver.addMapping(ThisIsTheProduct.class, "Product");
            builder.type(new TypeRuntimeWiring.Builder().typeName("Product").typeResolver(typeResolver).build());
        }
    }
    

    在此示例中,您在控制器中的查询将如下所示:

    @Controller
    class ProductQuery {
    
        @QueryMapping
        public ThisIsTheProduct product(@Argument String sku) {
            return new ThisIsTheProduct(sku);
        }
    
        ...
    }
    

    【讨论】:

    • TypeResolver 仅适用于 Interfaces 和 Unions:GraphQlSource.Builder 将 ClassNameTypeResolver 注册为默认 TypeResolver 以用于尚未通过 RuntimeWiringConfigurer 进行此类注册的 GraphQL Interfaces and Unions
    • 我更新了答案,以便您可以了解如何为类型使用不同的类名。
    猜你喜欢
    • 2020-09-23
    • 2021-06-01
    • 2014-04-07
    • 2016-01-29
    • 1970-01-01
    • 2020-09-16
    • 2015-07-07
    • 2023-04-04
    • 2019-06-12
    相关资源
    最近更新 更多