Dav*_*erg 8 java rest jax-rs jersey resteasy
问题(或缺少的特征)是不同查询参数之间缺乏表达可能性.当我看到它,你只能指定and参数之间,但是你怎么解决它,如果你想拥有not equal,or或xor?
我希望能够表达如下内容:
所有年龄在20岁或以博斯为名的用户
/用户年龄= 22?|名=博塞
除David和Lennart之外的所有用户
/用户?名字!=大卫&名字!=伦纳特
我的第一个想法是使用一个名为_filter的查询参数,并使用我的表达式获取一个String,如下所示:
所有年龄为22岁或姓名不是博士的用户
/ users?_filter = age eq 22或name neq Bosse
这个问题的最佳解决方案是什么?
我正在用Java和Jersey编写我的API,所以如果Jersey有任何特殊的解决方案,请告诉我.
我可以看到两种解决方案来实现这一目标:
执行方法时使用包含表达式的特殊查询参数GET。这是OData处理其参数的方式$filter(请参阅此链接: https: //msdn.microsoft.com/fr-fr/library/gg309461.aspx#BKMK_filter)。这是一个示例:
/AccountSet?$filter=AccountCategoryCode/Value eq 2 or AccountRatingCode/Value eq 1
Run Code Online (Sandbox Code Playgroud)
Parse.com也使用这种方法及其where参数,但查询是使用 JSON 结构描述的(请参阅此链接:https://parse.com/docs/rest/guide#queries)。这是一个示例:
curl -X GET \
-H "X-Parse-Application-Id: ${APPLICATION_ID}" \
-H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-G \
--data-urlencode 'where={"score":{"$gte":1000,"$lte":3000}}' \
https://api.parse.com/1/classes/GameScore
Run Code Online (Sandbox Code Playgroud)如果描述起来太困难,您还可以使用POST方法并在请求负载中指定查询。ElasticSearch使用这种方法来支持查询(请参阅此链接: https: //www.elastic.co/guide/en/elasticsearch/reference/current/search.html)。这是一个示例:
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{
"query": {
"bool" : {
"must" : {
"query_string" : {
"query" : "some query string here"
}
},
"filter" : {
"term" : { "user" : "kimchy" }
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)希望它对你有帮助,蒂埃里
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |