提问者:小点点

如何使用Spring Boot GraphQL Kickstart的开箱即用标量类型?找不到用于对象字段的typename


根据这个博客:https://medium.com/supercharges-mobile-product-guide/graphql-server-using-spring-boot-part-ii-scalars-31505fe90c4c除了标准的GraphQL模式类型之外,这些类型还捆绑在Spring boot graph ql kickstart的依赖项中:

scalar BigDecimal
scalar BigInteger
scalar Byte
scalar Char
scalar Short
scalar Long

我需要Long,因此将标量Long添加到我的架构文件中。我还将其添加到我的查询返回类型中:


type CharacterOutput {
    id: ID!,
    name: String!
    age: Int!
    bloodline: BloodlineOutput
    villageId: ID!
    timestamp: Long!
}

但是我在这里的数据类中使用什么作为类型呢?

data class CharacterOutput(
    val id: String,
    val name: String,
    val age: Short,
    val bloodline: BloodlineOutput?,
    val villageId: String?,
    val timestamp: // << ?
)

有人能告诉我这里用什么吗?


共2个答案

匿名用户

根据graph ql-java-kickstart抛出的异常,问题是graph ql-java-kickstart没有注册标量“Long”。

您可以按照此留档https://github.com/graphql-java-kickstart/graphql-spring-boot/wiki/Creating-a-custom-scalar-type创建自定义标量,或者简单地将Scalars. GraphQLLongGraphQLScalarType连接到您的模式解析器中。

要创建自定义标量,您需要两件事:

>

  • GraphQLScalarType的一个实例,它将把graph ql输入强制转换为java表示。多亏了graph ql-java,这已经为Long实现了!我们将使用Scalars. GraphQLLong

    SchemaParser bean: graph ql-java-kickstart使用默认的SchemaParser,可以覆盖它来指定模式解析器选项、模式文件等。

    @Bean
    public SchemaParser schemaParser() {
    
        //Chose your SchemaParserOptions as documented here: https://www.graphql-java-kickstart.com/tools/schema-parser-options/
        SchemaParserOptions schemaParserOptions = SchemaParserOptions.newOptions() //
            .preferGraphQLResolver(true) //customize your options
            .build();
    
        return SchemaParser.newParser() //SchemaParserBuilder
            .file("schema.graphqls") //Pick your schema files
            .scalars(Scalars.GraphQLLong) //Set your custom scalars
            .options(schemaParserOptions) //Set your schema parser options
            .build();
    }
    

  • 匿名用户

    配置SchemaParser的另一种方法是将您想要的标量注册为它们自己的bean。

    @Bean
    public GraphQLScalarType longType() {
        return Scalars.GraphQLLong;
    }
    

    请注意,特定于Java的标量目前已弃用,并注意它们将来将移动到单独的库中。