如何使用 Graphql SPQR 实现查询过滤器和排序?
Posted
技术标签:
【中文标题】如何使用 Graphql SPQR 实现查询过滤器和排序?【英文标题】:How to implement query filters and sorting using Graphql SPQR? 【发布时间】:2021-01-10 08:38:13 【问题描述】:如何使用 Graphql SPQR 实现查询过滤和排序?
我正在寻找一个使用 Graphql SPQR 的解决方案,用于看起来像这样的架构。
schema
query: Query
mutation: Mutation
enumSortOrder
ASC
DESC
type Article
id: String
name: String
createdByUserId: String
createdOn: String
lastUpdatedOn: String
type Feedback
id: String
feedbackText: String
articleId: String
createdByUserId: String
createdOn: String
lastUpdatedOn: String
type Query
getAllArticles(pageNumber: Int!, pageSize : Int!, sortOrder: SortOrder!, sortBy: String!): [Article]
getFeedBacksForArticle(articleId: String!): [Feedback]
type Mutation
createArticle(name: String!, createdByUserId: String!): Article
createNewFeedback(feedbackText: String!, articleId: String!, createdByUserId: String!): Feedback
【问题讨论】:
【参考方案1】:GraphQL SPQR 依赖于代码优先的方法。您需要创建您的 java 类和解析器并正确注释它们:
public enum SortOrder
@GraphQLEnumValue(name = "ASC") ASC,
@GraphQLEnumValue(name = "DESC") DESC
public class Article
//Article implementation here
public class Feedback
//Feedback implementation here
public class GraphQLResolver
@GraphQLQuery(name = "getAllArticles", description = "Search articles")
public List<Article> getAllArticles(
@NotNull @GraphQLArgument(name = "pageNumber") int pageNumber,
@NotNull @GraphQLArgument(name = "pageSize") int pageSize,
@NotNull @GraphQLArgument(name = "sortOrder") SortOrder sortOrder,
@NotNull @GraphQLArgument(name = "sortBy") String sortBy)
//Query implementation here
//implement other queries and mutation
按照https://github.com/leangen/graphql-spqr 的自述文件公开您的graphql 解析器。
【讨论】:
以上是关于如何使用 Graphql SPQR 实现查询过滤器和排序?的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL SPQR - 如何获取客户端使用查询请求的字段列表