【问题标题】:ValidationError FieldUndefined SPQR GraphQLValidationError FieldUndefined SPQR GraphQL
【发布时间】:2018-10-07 03:31:26
【问题描述】:

我收到以下信息,但似乎找不到答案。

Error [ValidationError{validationErrorType=FieldUndefined, queryPath=[find_by_id], message=Validation error of type FieldUndefined: Field 'find_by_id' in type 'Query' is undefined @ 'find_by_id', locations=[SourceLocation{line=1, column=2}], description='Field 'find_by_id' in type 'Query' is undefined'}]

我的代码。

查询

@GraphQLQuery(name = "find_by_id")
public Event findById(@GraphQLArgument(name = "id") Long id) {

架构生成

@EJB
private EventFacade eventFacade; // Normal stateless bean 

GraphQLSchema guestSchema = new GraphQLSchemaGenerator()
            .withOperationsFromSingleton(eventFacade)
            .withValueMapperFactory(new JacksonValueMapperFactory())
            .withDefaults()
            .generate();

GraphQL graphQL = GraphQL.newGraphQL(guestSchema).build();

要执行的代码

String query = "{find_by_id (id: 1){eventName}}";
ExecutionResult result = graphQL.execute(query);

使用SPQR

事件 POJO 是基本的事件名称,它是一个字符串,一个来自抽象(父)类的 id。实体类在不同的 jar (Entity Jar) 中。执行查询和构建模式的代码在 EJB Jar 中。

任何我出错的帮助/指示将不胜感激。

更新 创建了一个git问题来帮助解决Git Issue

【问题讨论】:

    标签: java graphql graphql-java graphql-spqr


    【解决方案1】:

    我相信你必须改变这一点 字符串查询 = "{find_by_id (id: 1){eventName}}"; 到 字符串查询 = "\"query\": {find_by_id (id: 1){eventName}}";

    【讨论】:

    • 我使用的库不需要它。查看 lib 中的示例
    • 如果我添加它,则会得到以下 graphql.GraphQL - 查询无法解析:'"query": {find_by_id (id: 1){eventName}}'
    【解决方案2】:

    您能否添加偶数类详细信息,我猜这就是您的问题所在,因为您的 URL 中的作者将一个类传递给查询,但您只传递了 ID(find_by_id) 后跟 {eventName} 我认为它应该改成

    "{Event(id: 1){eventName}}"
    

    作者在下面的 Vendor Class 示例中给出了一个关于如何使用 findByID 的示例,他以与您不同的格式调用它,也许可以试一试 :) https://github.com/leangen/graphql-spqr-samples

    【讨论】:

    • 试过了,还是不行。我相信第一部分只是查询的名称,而不是类/类型
    • stackoverflow.com/questions/48968896/… 你是否检查了这个答案以便更好地理解查询应该如何形成??
    • 我不确定您是否通读了该库。它将解释我试图做的大部分事情。也没有构建我自己的架构,因为 lib 正在为我做这件事
    【解决方案3】:

    我在这里找到了这个解决方案:https://github.com/leangen/graphql-spqr/wiki/Errors#ambiguous-member-type

    参考: 将所有缺少的类型参数视为对象或应用自定义类型 转换逻辑,提供一个 TypeTransformer:

    这应该适合你。

        GraphQLSchema schema = new GraphQLSchemaGenerator()
               .withBasePackages(basePackages)
               .withTypeTransformer(new DefaultTypeTransformer(true, true))
               .withOperationsFromSingleton(eventFacade).generate();
    

    【讨论】:

    • 这是必需的 .withBasePackages(basePackages) 吗?
    • 不,这不是必需的,这也是我应该在回答中提到的。您需要确保.withTypeTransformer.withOperationsFromSingleton 之前。
    猜你喜欢
    • 2021-10-26
    • 2021-07-25
    • 2020-08-19
    • 2019-10-13
    • 2019-06-08
    • 2021-06-03
    • 2021-08-31
    • 2018-12-09
    • 2020-02-28
    相关资源
    最近更新 更多