根据这个博客: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: // << ?
)
有人能告诉我这里用什么吗?
根据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. GraphQLLong
GraphQLScalarType连接到您的模式解析器中。
要创建自定义标量,您需要两件事:
>
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的标量目前已弃用,并注意它们将来将移动到单独的库中。