【问题标题】:Advanced search in a Rest Api using spring / querydsl使用 spring / querydsl 在 Rest Api 中进行高级搜索
【发布时间】:2021-04-12 05:26:26
【问题描述】:

我正在使用带有 Web 支持的 Spring Data / QueryDSL,使用注释 @EnableSpringDataWebSupport。 这很好用,并自动将 GET 查询映射到 Predicate。我可以使用以下查询搜索我的 DTP 对象:

http://localhost/search/dtp?name=foo

我现在需要添加更复杂的查询,例如 AND 或 OR 子句。

我发现这个库似乎实现了我想要的:spring-data-querydsl-value-operators

我的理解是,我需要将以下代码添加到我的 Repository 接口以利用此库:

@Override
default void customize(QuerydslBindings bindings, QDtp root) {
    bindings.bind(root.name).all(ExpressionProviderFactory::getPredicate);
    bindings.bind(root.description).all(ExpressionProviderFactory::getPredicate);
    ...
}

但是我之前不需要customize() 方法,现在看来我需要为我的对象的所有字段和子字段设置这些新绑定。这可能会导致维护问题:如果添加了新字段但开发人员忘记添加此绑定,则对该字段的搜索将无法与其他字段一样工作。

以前不是这样的。

我怎样才能使这些绑定通用并应用于我的对象的所有字段和子字段?

【问题讨论】:

    标签: java spring spring-data-jpa spring-data querydsl


    【解决方案1】:

    我认为你可以只使用这个库:https://github.com/turkraft/spring-filter

    它将让您运行搜索查询,例如:

    /search?filter= 平均(收视率)> 4.5 和 brand.name in (“奥迪”、“路虎”)和(年> 2018 或公里 50000) 和颜色 : '白色' 和意外是空的

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 2016-05-01
      • 2018-04-03
      • 1970-01-01
      • 2018-08-27
      • 2021-10-05
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      相关资源
      最近更新 更多