如何使用 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 - 如何获取客户端使用查询请求的字段列表

graphql-spqr 无法查询父类字段

如何使用 Graphql SPQR 实现订阅?

使用 graphql-spqr、java 和 mongo 进行中继分页

GraphQL SPQR 扩展输入对象的变异参数

如何使用 SPQR 获取生成的方案文件 .graphqls?