解析类型“查询”时,字段输入类型“长”不存在 [@6:1]

Posted

技术标签:

【中文标题】解析类型“查询”时,字段输入类型“长”不存在 [@6:1]【英文标题】:The field input type 'Long' is not present when resolving type 'Query' [@6:1] 【发布时间】:2021-08-06 13:28:10 【问题描述】:

在初始化 graphql 架构时,我遇到了错误堆栈跟踪。

init 方法调用失败;嵌套异常是 SchemaProblemerrors=[解析类型 'Query' 时字段输入类型 'Long' 不存在 [@6:1],解析类型 'ObjectRef' 时字段类型 'Long' 不存在 [@17: 1]] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:397) 在

ObjectRef 是我的对象。

type ObjectRef
id:Long
qualifier : String

我正在使用下面的一组 jar 来编译我的项目。

compile files('libs/latest/graphql-java-servlet-6.1.3.jar')
compile files('libs/latest/graphql-java-16.2.jar')
compile files('libs/latest/graphql-java-tools-5.2.4.jar')
compile files('libs/latest/graphql-spring-boot-autoconfigure-5.0.2.jar')
compile files('libs/latest/graphql-spring-boot-starter-5.0.2.jar')
compile files('libs/latest/antlr4-runtime-4.9.2.jar')
compile files('libs/lombok-1.16.18.jar')
compile files('libs/latest/graphql-java-extended-scalars-16.0.1.jar')

这是我的架构加载器。

@PostConstruct
private void loadSchema() throws IOException 
// get the schema
File schemaFile = schemaResource.getFile();
System.out.println(schemaFile.getAbsolutePath());
// parse schema
TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile);
System.out.println("type Registry..."+typeRegistry);
RuntimeWiring wiring = buildRuntimeWiring();
System.out.println("wiring..."+wiring);
GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(typeRegistry, wiring);
System.out.println("schema..."+schema);
graphQL = GraphQL.newGraphQL(schema).build();


private RuntimeWiring buildRuntimeWiring() 
System.out.println("buildRuntimeWiring...");
return RuntimeWiring.newRuntimeWiring().type("Query", typeWiring -> typeWiring
.dataFetcher("a", customDataFetcher)
).build();

问候 库沙格拉

【问题讨论】:

Long 不是有效类型,您需要IntFloat ok David.. 但是我正在尝试将 GraphQL 与现有系统集成,因此在我的情况下无法更改它。因此,我必须使我的更改与现有系统兼容。我看过这个medium.com/supercharges-mobile-product-guide/…那么,你认为它会解决问题吗/ 我可以使用标量解决上述问题。我创建了一个名为 Long 的新标量,并在 .graphqls 中使用以下方式使用相同的标量。标量 Long 返回 RuntimeWiring.newRuntimeWiring().type("Query", typeWiring -> typeWiring .dataFetcher("a", customDataFetcher).scalar(ExtendedScalars.GraphQLLong)).build();它还需要创建一个 ScalarType 实现以按预期方式运行。如果有人需要完整代码,请随时 ping 这张票。 【参考方案1】:

我能够使用标量解决上述问题。我创建了一个名为 Long 的新标量,并在 .graphqls 中使用以下方式使用相同的标量。标量 Long 返回 RuntimeWiring.newRuntimeWiring().type("Query", typeWiring -> typeWiring .dataFetcher("a", customDataFetcher).scalar(ExtendedScalars.GraphQLLong)).build();它还需要创建一个 ScalarType 实现以按预期方式运行。如果有人需要完整代码,请随时 ping 这张票。

【讨论】:

以上是关于解析类型“查询”时,字段输入类型“长”不存在 [@6:1]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不编写长查询的情况下查询所有 GraphQL 类型字段?

如何在不编写长查询的情况下查询所有 GraphQL 类型字段?

GraphQL:返回具有不可为空 id 字段的类型作为查询结果

mysql优化

常用功能-查询功能测试点

web测试方法