【问题标题】:Adding fragments in GraphQL query from Java在 Java 的 GraphQL 查询中添加片段
【发布时间】:2019-10-02 05:52:29
【问题描述】:

在寻找任何文档的长时间会议之后,我不得不询问社区。​​p>

目前我正在从 Java 代码(也尝试与 Postman 相同)查询 GraphQL:

请求:

{"query":"{findPublisherByLicenseNumber(licenseNumber : \"UAE_DXB_CMH-971\") {name licenseNumber}}"}

回应:

{
    "data": {
        "findPublisherByLicenseNumber": {
            "name": "Cantaloupe Media House",
            "licenseNumber": "UAE_DXB_CMH-971"
        }
    }
}

这是我在后端查询端点的查询:http://mg-api.com/mg-graphQL

到目前为止,我只提到了两个字段,但实际的 Schema 有很多。

type Publisher {
    ID: ID!
    name: String!
    licenseNumber: String!
    address: String
    contactNumber: String
    mobileNumber: String
    areaCode: Int!
    ...
    ... #few more fields
    books: [Book]

}

extend type Query {
    findAllPublishers: [Publisher]!
    findPublisherByLicenseNumber(licenseNumber: String!) : Publisher!

}

我要在 Query 中添加的片段:

fragment publisherInfo on Publisher {
    ID
    name
    licenseNumber
    address
    contactNumber
    areaCode
}

这样尝试过

{"query":"{findPublisherByLicenseNumber(licenseNumber : \"UAE_DXB_CMH-971\") {...publisherInfo}}", "fragment" : "fragment publisherInfo on Publisher {ID name licenseNumber address contactNumber areaCode }"}

但是得到了 ValidationErrormessage : Undefined fragment publisherInfo

{
    "data": null,
    "errors": [
        {
            "message": "Validation error of type UndefinedFragment: Undefined fragment pubInfo @ 'findPublisherByLicenseNumber'",
            "locations": [
                {
                    "line": 1,
                    "column": 67,
                    "sourceName": null
                }
            ],
            "description": "Undefined fragment pubInfo",
            "validationErrorType": "UndefinedFragment",
            "queryPath": [
                "findPublisherByLicenseNumber"
            ],
            "errorType": "ValidationError",
            "path": null,
            "extensions": null
        }
    ]
}

当我尝试使用 GraphiQL UI 实现相同的效果时,它可以工作。

我还没有开始考虑从 UI 框架中调用它,我需要在 Vanilla JS/Angular/React/Vue 等中使用 graphql.js。

到目前为止,我希望从我的后端代码逻辑中利用它,因为在 UI 和我的 graphql 服务之间有一个中间件。

我发现的唯一一件事没有得到答复,如果得到答复,那么完全是模糊的:S.O Question

感谢任何帮助。

已解决

需要在方法之前传递片段;

{"query":"fragment pubInfo on Publisher {name licenseNumber contactNumber} {findPublisherByLicenseNumber(licenseNumber :\"UAE_DXB_CMH-971\") {...pubInfo}}"}

【问题讨论】:

    标签: java graphql


    【解决方案1】:

    已解决

    需要在同一个Query中在方法调用主体{}之前/之后传递片段;

    {"query":"fragment pubInfo on Publisher {name licenseNumber contactNumber} {findPublisherByLicenseNumber(licenseNumber :\"UAE_DXB_CMH-971\") {...pubInfo}}"}
    

    【讨论】:

    • 对于它的价值,片段的位置是重要的。可以放在手术前或手术后。
    猜你喜欢
    • 2019-12-28
    • 2018-03-23
    • 2018-01-12
    • 2016-05-04
    • 2022-01-16
    • 2021-02-16
    • 2018-09-29
    • 2019-01-27
    • 2021-06-20
    相关资源
    最近更新 更多