我正在使用GraphQL Spring-boot库来构建GraphQL API https://github.com/graphql-java/graphql-spring-boot
我有一个架构
type Car {
id: ID!
model: String
brand: String
}
type Query {
allCars: [Car]!
}
我的查询在Spring Boot项目的Query类中实现
@Component
public class Query implements GraphQLQueryResolver {
public List<Machine> allCars() {}
}
我的问题是:
返回列表时如何使用过滤器和排序:
allCars(first:3){id model}
allCars(filter: {....}){}
我想这是必须在Java方法中实现的东西,但我不确定如何在方法中注入过滤器等。
答案 0 :(得分:1)
我的猜测是你会创建自己的过滤器输入类型,例如:
type Query {
allCars(filter: CarsFilter!): [Car]
}
input CarsFilter {
color: String!
brand: String!
}
之后,您可以编写CarsFilter
的Java实现,例如:
public class CarsFilter {
private String color;
private String brand;
// Getters + Setters
}
现在您可以使用CarsFilter
类编写解析器:
public List<Car> allCars(CarsFilter filter) {
// Filter by using JPA specifications, custom queries, ...
}
答案 1 :(得分:0)
GraphQL允许客户端确切地指定所需的数据,但是它没有任何内置的过滤和排序数据的方式。您将自己为此编写代码。关于注入过滤器,一种可行的方法如下:
type Query {
allCars(filter: String, range: String, sort: String): [Car]!
}
对于上述查询,示例请求如下:
{
allCars(filter: "{brand: 'Abc'}", range: "[0, 100]", sort: "[id, ASC]") { # Fetch first 100 cars of brand 'Abc' sorted by id
id
model
brand
}
}
然后,您的getAllCars方法将如下所示:
public List<Car> getAllCars(String filter, String range, String sort) {
// Implement parser and filter by using JPA specifications
}
要查看解析器的示例实现并将其转换为JPA规范,请参阅以下项目:https://github.com/jaskaransingh156/spring-boot-graphql-with-custom-rql