通过Java

时间:2019-05-15 06:58:18

标签: java graphql

经过很长时间的查找任何文档后,我被迫向社区询问。

目前,我正在使用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!

}

我要在查询中添加的片段:

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 }"}

但获得了{strong> 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框架中调用它,我需要在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}}"}

1 个答案:

答案 0 :(得分:0)

已解决

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

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