明确说明排序属性

时间:2019-03-26 11:08:20

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

我正在尝试使用Spring的Pageable实现HTTP请求的分页和排序。一切工作正常,除非我想明确声明可排序的属性,即资源具有属性idnamecreated。 默认实现允许用户调用HTTP请求并按所有属性对结果进行排序。但是,我只想将排序限制为列idname

下面是我当前代码的一个示例

@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中是否存在一种仅通过显式定义的属性进行排序的简单方法。

1 个答案:

答案 0 :(得分:0)

仅创建一个可分页的页面,仅按idname对找到的项目进行排序,可以使用以下代码段,换句话说,访问存储库,如:

Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("id", "name"));
itemsRepository.findAll(pageable);