当前位置: 首页 > 知识库问答 >
问题:

Spring Boot查询过滤

通建安
2023-03-14

我正在使用GraphQL Spring Boot库构建GraphQL APIhttps://github.com/graphql-java/graphql-spring-boot

我有一个模式

type Car {
    id: ID!
    model: String
    brand: String
}

type Query {
    allCars: [Car]!
}

我的查询是在Spring Boot项目的查询类中实现的

@Component
public class Query implements GraphQLQueryResolver {

public List<Machine> allCars() {}

}

我的问题是:

返回列表时如何使用过滤器和排序:

allCars(first:3){id model}

allCars(filter: {....}){}

我想这是必须在Java方法中实现的,但我不确定如何在方法中注入过滤器等。

共有2个答案

羿博延
2023-03-14

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

红弘盛
2023-03-14

我的猜测是,您将创建自己的过滤器输入类型,例如:

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, ...
}
 类似资料:
  • 问题内容: 我有一个带有许多字段的表。我正在尝试在asp.net中创建搜索过滤器,以便用户可以按一个或多个字段进行搜索。所以基本上我想创建一个包含4个参数的存储过程,如果它不为null,它将把参数附加到WHERE子句中。 TableExample有4列,Col1 Col2 Col3 Col4 我希望有一种方法可以用一个存储过程完成此操作,而不必为每种可能的组合创建一个。 我正在尝试类似的方法,虽然

  • 我刚刚开始使用Spring Boot,我想使用RestTemplate调用一个查询并返回它的结果。 如何使用RESTTemplate调用查询?还是有更好的办法做这件事?

  • 问题内容: 我什么时候应该使用查询或过滤器或两者的某种组合都看不到任何描述。它们之间有什么区别?谁能解释一下? 问题答案: 区别很简单:过滤器被缓存并且不影响得分,因此比查询要快。也在这里看看。假设查询通常是用户输入的内容,并且几乎是不可预测的,而过滤器则可以帮助用户缩小搜索结果的范围,例如使用构面。

  • 如何在下面的本机搜索查询中添加查询超时?

  • 我在GET api中有多个查询参数(如姓名、年龄、性别、位置等…n个数字)。现在我需要使用这些查询值来查询我的mongo数据库。现在用户可以发送从0到n的查询参数。 我正在尝试使用类似的东西 或者 但问题是,考虑到用户可以发送的所有排列和组合,我将不得不编写多个查询。有没有更好的方法来做到这一点?

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的