要求
例如,resourceA.attribute1 =“ CAT” AND resourceA.subResourceB.attribute2> = 42 AND resourceA.attribute3 IN(“ WHIZ”,“ BANG”)
我研究了四种解决方案-每种解决方案都更加接近目标。有没有我找不到的其他解决方案,还是没有这样的完整解决方案-是在下面概述的“基于RSQL的REST查询语言”基础上的答案吗?
1)春季数据剩余查询
Spring数据中有很多支持,可用于在代码中开发复杂的查询,但这要求开发人员事先了解查询的结构,并相应地构造代码。 https://docs.spring.io/spring-data/rest/docs/current/reference/html/#repository-resources.query-method-resource
2)spring-data,spring-data-rest,query-dsl
http://www.baeldung.com/rest-api-search-querydsl-web-in-spring-data-jpa
+ ve非常适合-完全可用的解决方案,开箱即用几乎为零
可以构建+ ve深度嵌套的查询,并且服务器可以动态生成正确的SQL。
-ve唯一的运算符是EQUALS'=',以便应用其他运算符,您需要实现QuerydslBinderCustomizer实例,这再次要求服务器代码提前知道查询的复杂性。
3)Baeldung-“建立休息查询语言”
http://www.baeldung.com/spring-rest-api-query-search-language-tutorial
+ ve-接近通用查询语言
-ve-感觉像是演示/ POC
4)使用RSQL的REST查询语言
http://www.baeldung.com/rest-api-search-language-rsql-fiql
+ ve-感觉更完整的查询语言和相关的解析器
-ve-不确定弹簧集成