使用spring/querydsl在Rest-Api中进行高级搜索



我使用的是带有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品牌名称("奥迪"、"路虎"(和(年份>2018km<50000(和颜色"白色">事故为空

相关内容

  • 没有找到相关文章

最新更新