我正在尝试使用Spring的Pageable实现HTTP请求的分页和排序。一切工作正常,除非我想明确声明可排序的属性,即资源具有属性id
,name
,created
。
默认实现允许用户调用HTTP请求并按所有属性对结果进行排序。但是,我只想将排序限制为列id
和name
。
下面是我当前代码的一个示例
@GetMapping("/items")
public Page<ItemDto> getItems(Pageable pageable) {
return itemsRepository.findAll(pageable).map(itemsMapper::toItemDto);
}
显而易见的解决方案是从Sort
检索Pageable
对象,并像这样手动验证属性
@GetMapping("/items")
public Page<ItemDto> getItems(Pageable pageable) {
pageable.getSort().forEach(order -> {
if (!StringUtils.equalsAnyIgnoreCase(order.getProperty(), "id", "code") {
// throw exception
}
}
return itemsRepository.findAll(pageable).map(itemsMapper::toItemDto);
}
我的问题是,在Spring中是否存在一种仅通过显式定义的属性进行排序的简单方法。
答案 0 :(得分:0)
仅创建一个可分页的页面,仅按id
和name
对找到的项目进行排序,可以使用以下代码段,换句话说,访问存储库,如:
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("id", "name"));
itemsRepository.findAll(pageable);