5.16. 使用实体搜索过滤器
REST API 可以在获取实体列表时可以指定即时搜索条件。
假设我们有两个实体:
-
Author 有两个字段:
lastName
和firstName
-
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
参数也在请求体中传递。