我使用的是带有web支持的Spring Data/QueryDSL,使用的是注释@EnableSpringDataWebSupport
。这样做效果很好,并自动将GET查询映射到Predicate
。我可以使用以下查询来搜索我的DTP对象:
http://localhost/search/dtp?name=foo
我现在需要添加更复杂的查询,例如AND或or子句。
我找到了这个库,它似乎实现了我想要的:spring数据查询dsl值运算符
我的理解是,我需要将以下代码添加到我的Repository接口中,以利用这个库:
@Override
default void customize(QuerydslBindings bindings, QDtp root) {
bindings.bind(root.name).all(ExpressionProviderFactory::getPredicate);
bindings.bind(root.description).all(ExpressionProviderFactory::getPredicate);
...
}
然而,我以前不需要customize()
方法,现在看来我需要为对象的所有字段和子字段都有这些新的绑定。这可能会导致维护问题:如果添加了一个新字段,但开发人员忘记添加此绑定,那么对该字段的搜索将无法与其他字段一样工作。
以前的情况并非如此。
如何使这些绑定是通用的,并应用于对象的所有字段和子字段?
我认为您可以只使用这个库:https://github.com/turkraft/spring-filter
它将允许您运行搜索查询,例如:
/search?filter= 平均值(评级(>4.5和品牌名称在("奥迪"、"路虎"(和(年份>2018或km<50000(和颜色:"白色">,事故为空