在 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 "
但是得到了 ValidationError
和 message
: 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 查询中添加片段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中发送带有片段的 graphql 查询
为啥 GraphQL 片段在查询中需要 __typename?
你如何在 python 中处理 graphql 查询和片段?