3.9.11.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 应如下所示:
  1. {
  2. "conditions": [
  3. {
  4. "property": "author.firstName",
  5. "operator": "startsWith",
  6. "value": "Alex"
  7. },
  8. {
  9. "property": "publicationDate",
  10. "operator": "=",
  11. "value": 2007
  12. }
  13. ]
  14. }

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

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

例 2

下一个示例演示了两件事:如何使用 POST 请求执行搜索以及如何使用 OR 分组条件。如果是 POST 请求,则必须在请求体的 JSON 对象中传递所有参数。搜索过滤器必须放在名为 filter 的对象字段中。所有其它参数(视图名称、限制条件等)必须放在相应名称的字段中:
  1. {
  2. "filter": {
  3. "conditions": [
  4. {
  5. "group": "OR",
  6. "conditions": [
  7. {
  8. "property": "author.lastName",
  9. "operator": "contains",
  10. "value": "Stev"
  11. },
  12. {
  13. "property": "author.lastName",
  14. "operator": "=",
  15. "value": "Dumas"
  16. }
  17. ]
  18. },
  19. {
  20. "property": "publicationDate",
  21. "operator": "=",
  22. "in": [2007, 2008]
  23. }
  24. ]
  25. },
  26. "view": "book-view"
  27. }

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

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

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