【发布时间】:2016-12-26 15:11:12
【问题描述】:
在official documentation 之后,将@EnableSpringDataWebSupport 注释添加到我的Spring 配置允许在查询中自动注入Predicate 类:
@RequestMapping(method = RequestMethod.GET, path="/find")
public ResponseEntity<PagedResources<FooResource>> find(Pageable pageable, PagedResourcesAssembler<Foo> assembler, @QuerydslPredicate(root = Foo.class) Predicate predicate) {
Page<Foo> foos = fooRepository.findAll(predicate, pageable)
final ResourceAssemblerSupport<Foo, FooResource> fooResourceAssembler = new ....;
final PagedResources<FooResource> pagedResources = assembler.toResource(foos, fooResourceAssembler);
return new ResponseEntity<>(pagedResources, HttpStatus.OK);
}
那么我在执行GET请求的时候就可以轻松搜索了:
GET /foo/name?=bob&name=alice&age=20
这很好用。但是我想知道如何实现更高级的搜索条件:
><>=<=
通常我想将这些运算符应用于我的数据模型中的数字和日期字段。 Querydsl 支持这类标准。
我尝试在查询参数中添加> (%3E),但解析失败(例如,对于像年龄这样的数字字段,它抱怨它无法将>10 解析为数字。
是否可以直接在查询中使用该运算符?
(以防万一我使用 Spring Data Mongodb)
【问题讨论】:
-
你有没有找到实现这个的方法?我一直在尝试实现类似的东西,但没有成功。
-
@woemler 我实际上已经暂时搁置了这个问题,但它并没有消失。我想我最终会编写自己的代码来解析查询参数。我需要检查是否有一种简单的方法可以将其与弹簧注射机构集成。当我开始这样做时,我可能会在 spring github 存储库上寻求建议。如果我发现一些有趣的东西,会在这里写下来作为答案
-
@phoenix7360 有什么事吗?我也想这样做,但仍然使用
@QuerydslPredicate -
@StopHarmingMonica 不幸的是我从来没有做到这一点,只是放弃了:/
-
@phoenix7360 Spring Data Querydsl 值运算符库执行此操作...
标签: java spring spring-boot spring-data querydsl