【问题标题】:Graphql Schema doku displays Input type automatically with InputGraphql Schema doku 使用 Input 自动显示 Input 类型
【发布时间】:2021-06-04 07:09:00
【问题描述】:

我添加了leagen/graphql-spqr,如自述文件中所述。 在我们自定义实现 graphql 类型之前,例如 customtype.types.gql。

实施后,一切正常,除了被调用的类型,例如OperatorInput,在自动生成的 graphql 文档中命名,如“OperatorInputInput”。 我试图在声明中像这样更改它:

@GraphQLArgument(name = "OperatorInput", description = "Required fields for Operator") OperatorInput operator

但它没有被应用。 你知道任何解决方法吗?

【问题讨论】:

    标签: graphql-spqr


    【解决方案1】:

    这是有意的。请记住,在 GraphQL 的类型系统中,输入和输出类型是完全不同的。假设你在 Java 中有这个:

    public Book saveBook(Book in) {...}
    

    作为返回类型的Book 和作为参数类型的Book 在 GraphQL 中是两种不同的类型,并且必须具有唯一的名称。所以Input 会自动添加以使名称唯一。

    如果您 100% 确定要覆盖此设置,请通过 GraphQLSchemaGenerator#withTypeInfoGenerator 注册自定义 TypeInfoGenerator。您可以从DefaultTypeInfoGenerator 继承并覆盖generateInputTypeName。但!请注意,如果您最终为 2 种不同的类型生成了相同的名称,那么一切都会崩溃。因此,如果类名已经以 Input 结尾并且永远不要使用此类类进行输出,则可能只删除后缀 Input

    顺便说一句@GraphQLArgument 设置参数的名称,而不是参数的类型的名称。

    【讨论】:

    • @kaqqaio 非常感谢。这是有道理的!
    • 对我来说根本没有意义。我真的不明白为什么框架会为我改变任何命名约定。现在,当我重写在 Spring Boot 中创建的旧后端时,我遇到了一种情况,因此我无法保持相同的架构结构。很抱歉,但在我看来,将其设为默认行为是无稽之谈。
    • 另一点是:假设我提到了 Book DTO/entity,或者无论如何我们将调用它 - 那么我将需要为输入和输出使用相同的名称:Book,这使得它非常不方便在 java 代码中使用不方便,因为我需要为其中之一做限定名称:
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2015-11-25
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多