在 Java 的 GraphQL 查询中添加片段

Posted

技术标签:

【中文标题】在 Java 的 GraphQL 查询中添加片段【英文标题】:Adding fragments in GraphQL query from Java 【发布时间】: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"

【问题讨论】:

【参考方案1】:

已解决

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

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

【讨论】:

对于它的价值,片段的位置是重要的。可以放在手术前或手术后。

以上是关于在 Java 的 GraphQL 查询中添加片段的主要内容,如果未能解决你的问题,请参考以下文章

将 graphQL 片段添加到模式中,并且可用于所有查询

如何在 Android 中发送带有片段的 graphql 查询

为啥 GraphQL 片段在查询中需要 __typename?

你如何在 python 中处理 graphql 查询和片段?

无法通过 Prisma 在 GraphQL-yoga 中使用片段

在graphql中嵌套片段