5.16. 使用实体搜索过滤器

REST API 可以在获取实体列表时可以指定即时搜索条件。

假设我们有两个实体:

  • Author 有两个字段: lastNamefirstName

  • Book 有三个字段: title(String)、 author(Author) 和 publicationYear(Integer)

要使用条件执行搜索,必须使用以下 URL:

http://localhost:8080/app/rest/v2/entities/test$Book/search

搜索条件需要在 filter 参数中传递。这是一个包含一组条件的 JSON 对象。如果使用 GET 请求执行搜索,则需要在 URL 中传递 filter 参数。

例 1

我们需要找到 2007 年出版的所有书籍,并且有一个名字以"Alex"开头的作者。过滤器 JSON 应如下所示:

{
    "conditions": [
        {
            "property": "author.firstName",
            "operator": "startsWith",
            "value": "Alex"
        },
        {
            "property": "publicationDate",
            "operator": "=",
            "value": 2007
        }
    ]
}

默认情况下,搜索条件之间使用 AND 连接。

此示例还演示了对嵌套属性(author.firstName)的支持。

例 2

下一个示例演示了两件事:如何使用 POST 请求执行搜索以及如何使用 OR 分组条件。如果是 POST 请求,则必须在请求体的 JSON 对象中传递所有参数。搜索过滤器必须放在名为 filter 的对象字段中。所有其它参数(视图名称、限制条件等)必须放在相应名称的字段中:

{
  "filter": {
    "conditions": [
      {
        "group": "OR",
        "conditions": [
          {
            "property": "author.lastName",
            "operator": "contains",
            "value": "Stev"
          },
          {
            "property": "author.lastName",
            "operator": "=",
            "value": "Dumas"
          }
        ]
      },
      {
        "property": "publicationDate",
        "operator": "=",
        "in": [2007, 2008]
      }
    ]
  },
  "view": "book-view"
}

在此示例中,conditions 集合不仅包含条件对象,还包含 OR 分组条件。所以最终搜索条件将是:

((author.lastName contains Stev) OR (author.lastName = Duma) AND (publicationDate in [2007, 2008]))

请注意,view 参数也在请求体中传递。