java - 如何在spring boot中使用分页对存储库实体进行排序
问题描述
我正在用 Spring Boot 编写一个 REST API。在这里,我正在尝试使用“PagingAndSortingRepository”对列表进行排序。这是我在 Controller 类中尝试过的方法
@GetMapping public ResponseEntity
<PagedModel<ComplainDTO>> getComplains(@RequestParam(defaultValue = "0",value = "page",required =false)int page, @RequestParam(value="sortBy" ,required = false,defaultValue = "complainId") String sortBy, PagedResourcesAssembler assembler) {
return ResponseEntity.status(HttpStatus.OK)
.body(assembler.toModel(complainService.getAllComplains(page,sortBy)));
}
我的服务方法
@Override
public Page<ComplainDTO> getAllComplains(int page,String sortBy) {
Pageable pageable = PageRequest.of(page,20, Sort.by(sortBy));
Page<ComplainEntity> result =complainRepository.findAll(pageable);
return result.map(complainEntity -> toDTO(complainEntity));
}
我从消费者那里获取输入以根据给定的属性对列表进行排序,但是 Sort 的默认行为是 Ascending 。那么,除了使用 if-else 之外,我如何实现这个获取用户参数是升序还是降序。
解决方案
一种选择是要求用户使用@RequestParam
@GetMapping public ResponseEntity
<PagedModel<ComplainDTO>> getComplains(@RequestParam(defaultValue = "0",value = "page",required =false)int page,
@RequestParam(value="sortBy" ,required = false,defaultValue = "complainId") String sortBy,
@RequestParam(value="orderBy" ,required = false,defaultValue = "ASC") String orderBy, PagedResourcesAssembler assembler) {
return ResponseEntity.status(HttpStatus.OK)
.body(assembler.toModel(complainService.getAllComplains(page,sortBy,orderBy)));
}
然后在服务中将排序顺序传递给Sort
方法
@Override
public Page<ComplainDTO> getAllComplains(int page,String sortBy, String orderBy) {
Pageable pageable = PageRequest.of(page,20, Sort.by(Sort.Direction.valueOf(orderBy),sortBy));
Page<ComplainEntity> result =complainRepository.findAll(pageable);
return result.map(complainEntity -> toDTO(complainEntity));
}
推荐阅读
- azure-devops - 在 VSTS 中混合来自 nuget.org 和存储库文件夹的包
- javascript - Vue.js 服务器端渲染生成的包未定义
- html -
- r - 根据 R 中的条件保留先前的数据帧
- java - 尝试修改 toString() 方法以获得所需的结果
- react-native - react-native 脚本是如何工作的?
- azure - Create Azure Key Vault C# error remote server returned an error: (403) Forbidden
- arrays - 如何访问 vue js 列表中的对象元素(nuxt)
- .htaccess - 重定向部分 URL
- c# - C# 通过 azure 混合连接连接到 SQL Server 数据库