Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何使用现成的标量类型的Spring Boot GraphQL Kickstart?Can';找不到用于对象域的类型名_Spring Boot_Kotlin_Graphql Java - Fatal编程技术网

Spring boot 如何使用现成的标量类型的Spring Boot GraphQL Kickstart?Can';找不到用于对象域的类型名

Spring boot 如何使用现成的标量类型的Spring Boot GraphQL Kickstart?Can';找不到用于对象域的类型名,spring-boot,kotlin,graphql-java,Spring Boot,Kotlin,Graphql Java,根据这个博客:除了标准的GraphQL模式类型之外,这些都捆绑在spring boot GraphQL kickstart的依赖项中: scalar BigDecimal scalar BigInteger scalar Byte scalar Char scalar Short scalar Long 我需要Long,因此将scalar Long添加到我的模式文件中。 我还将其添加到我的查询返回类型中: type CharacterOutput { id: ID!, nam

根据这个博客:除了标准的GraphQL模式类型之外,这些都捆绑在spring boot GraphQL kickstart的依赖项中:

scalar BigDecimal
scalar BigInteger
scalar Byte
scalar Char
scalar Short
scalar Long
我需要
Long
,因此将
scalar 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: // << ?
)
数据类字符输出(
valid:String,
val name:String,
年龄:短,
瓦尔血统:血统输出?,
val villageId:字符串?,

val timestamp://根据graphql java kickstart引发的异常,问题在于graphql java kickstart没有注册标量“Long”

您可以按照此文档创建自定义标量,也可以将
Scalars.GraphQLLong
GraphQLScalarType连接到模式解析器中

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

  • GraphQLScalarType的一个实例,该实例将把graphql输入强制到java表示中。多亏了GraphQLJava,这已经实现了很长时间了!我们将使用
    Scalars.GraphQLLong

  • SchemaParser bean:graphql 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();
    }
    

  • 根据graphql java kickstart引发的异常,问题在于graphql java kickstart没有注册标量“Long”

    您可以按照此文档创建自定义标量,也可以将
    Scalars.GraphQLLong
    GraphQLScalarType连接到模式解析器中

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

  • GraphQLScalarType的一个实例,该实例将把graphql输入强制到java表示中。多亏了GraphQLJava,这已经实现了很长时间了!我们将使用
    Scalars.GraphQLLong

  • SchemaParser bean:graphql 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特定的标量目前已被弃用,注意它们将在将来移动到一个单独的库。

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

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

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

    我还没有使用springboot graphql kickstart中捆绑的标量,我也不知道Kotlin。但是您尝试过“val timestamp:Long”吗如果是这样的话,它有什么问题吗?这是一个例外:
    graphql.kickstart.tools.SchemaClassScannerError:需要一个名为“Long”的用户定义graphql标量类型,但没有找到!
    我没有使用springboot graphql kickstart中捆绑的标量,我不知道Kotlin。但是您尝试过“val timestamp:Long”吗如果是这样的话,它有什么问题吗?这是一个例外:
    graphql.kickstart.tools.SchemaClassScannerError:需要一个名为“Long”的用户定义graphql标量类型,但找不到!
    你能给我看一下完整的工作示例吗?我总是看到人们如何像你这样解释这个解决方案,但因为我使用了spring boot是DI我不知道该写在哪里?@xetra11我添加了一个完整的schemaParser bean示例。应该不需要其他任何东西。你能给我展示完整的工作示例吗?我总是看到人们像你在这里一样用一行程序来解释这个解决方案,但由于我使用spring boot,它是DI,我不知道该写在哪里?@xetra11我添加了一个完整的schemaParser bean示例。应该不需要其他任何东西。