解析类型“查询”时,字段输入类型“长”不存在 [@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
不是有效类型,您需要Int
或Float
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 类型字段?