spring-boot - PagingAndSortingRepository - 自定义可分页响应结构
问题描述
有没有办法简化从这个控制器返回的结构:
@GetMapping
public Iterable<Task> getAll(@PathParam("page") int page) {
Pageable pageable = PageRequest.of(page, 3);
return taskRepository.findAll(pageable);
}
现在响应的正文如下:
本地主机:8080/api/task?page=2
{
"content": [
...
],
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"offset": 6,
"pageSize": 3,
"pageNumber": 2,
"paged": true,
"unpaged": false
},
"totalElements": 19,
"last": false,
"totalPages": 7,
"number": 2,
"size": 3,
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"numberOfElements": 3,
"first": false,
"empty": false
}
有什么办法可以减少这些数据?如果我现在对排序不感兴趣,只想返回如下内容怎么办:
{
"content": [
...
],
"pageable": {
"pageSize": 3,
"pageNumber": 2,
"totalElements": 19,
},
}
因此,当前的响应具有太多我并不真正需要的属性。什么是实现这一目标的好方法?如果我想定制这么多,我应该完全不同地做这件事吗?
解决方案
另一种方法是根据需要创建自定义页面类并从数据创建并返回
@Data
public class CustomPage<T> {
List<T> content;
CustomPageable pageable;
public CustomPage(Page<T> page) {
this.content = page.getContent();
this.pageable = new CustomPageable(page.getPageable().getPageNumber(),
page.getPageable().getPageSize(), page.getTotalElements());
}
@Data
class CustomPageable {
int pageNumber;
int pageSize;
long totalElements;
public CustomPageable(int pageNumber, int pageSize, long totalElements) {
this.pageNumber = pageNumber;
this.pageSize = pageSize;
this.totalElements = totalElements;
}
}
}
并像这样使用
@GetMapping
public CustomPage<Task> getAll(@PathParam("page") int page) {
Pageable pageable = PageRequest.of(page, 3);
return new CustomPage<Task>(taskRepository.findAll(pageable));
}
注意: 这里的@Data 的 Lombok 用于 setter getter 等。
推荐阅读
- jquery - 单击时哈希更改
- php - 错误:无法连接到 MySQL。调试错误:2002 调试错误:连接被拒绝
- android - 无法在 Android Oreo 中触发广播接收器
- angular - 如何从角度的电话号码中找到国家代码?
- mysql - 如何从第三个关系表中获取总和
- android - 如何检查设备是否刚刚连接到互联网
- unit-testing - 在角度 6 中运行 ng 测试期间出现 null 的“appendchild”错误
- java - 将 Lucene 与 H2 数据库一起使用时出错
- android - 我可以在 oreo 注册接收器 BluetoothAdapter.ACTION_STATE_CHANGED 吗?
- typo3 - TYPO3 9.5 LTS routeEnhancers for news with uid 使路径独一无二