Spring Data REST 的 QueryDSL 集成可以用于执行更复杂的查询吗?

2023-12-21

我目前正在构建一个 REST API,希望客户端能够轻松过滤特定实体的大多数属性。使用QueryDSL http://querydsl.com/结合春季数据休息 http://projects.spring.io/spring-data-rest/ (奥利弗·吉尔克(Oliver Gierke)的一个例子 https://gist.github.com/olivergierke/decf03d4948cd58a51bc)允许客户端通过组合引用属性的查询参数(例如/users?firstName=Dennis&lastName=Laumen).

我什至可以通过实现来自定义查询参数和实体属性之间的映射QuerydslBinderCustomizer接口(例如,用于不区分大小写的搜索或部分字符串匹配)。这一切都很棒,但是我也希望客户端能够使用范围过滤某些类型。例如,对于诸如出生日期之类的属性,我想做类似以下的事情,/users?dateOfBirthFrom=1981-1-1&dateOfBirthTo=1981-12-31。基于数字的属性也是如此,/users?idFrom=100&idTo=200。我觉得这应该可以使用QuerydslBinderCustomizer接口,但是这两个库之间的集成没有非常广泛的记录。

最后,使用 Spring Data REST 和 QueryDSL 可以实现这一点吗?如果是这样,怎么办?


我认为您应该能够使用以下自定义来使其工作:

bindings.bind(user.dateOfBirth).all((path, value) -> {

  Iterator<? extends LocalDate> it = value.iterator();
  return path.between(it.next(), it.next());
});

这里的关键是使用?dateOfBirth=…&dateOfBirth=(使用该属性两次)和….all(…)绑定将使您能够访问所提供的所有值。

确保您添加了@DateTimeFormat注释到dateOfBirth- 财产User这样Spring就能够将传入的Strings into LocalDate实例正确。

lambda 目前得到一个Collection<? extends T>这使得理清各个元素变得更加痛苦,但我认为我们可以在未来的版本中改变这一点,而不是暴露一个List.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data REST 的 QueryDSL 集成可以用于执行更复杂的查询吗? 的相关文章

随机推荐