我正在使用 Spring Boot 2,并且我在
@RestController
中编写了 @GetMapping
,并以 Pageable
作为参数。
@GetMapping
public ResponseEntity<Page<AppointmentTO>> findAll(Pageable pageable) {
Page<AppointmentTO> page = appointmentService.findAll(pageable);
return ResponseEntity.ok(page);
}
问题如下:
通过每个请求,查询参数
pageSize
和offset
在到达Spring Boot后端时总是重置为默认值(?offset=0&pageSize=20
),但是我在请求的url中发送不同的参数(?offset=15&pageSize=5
)
例如)。
Spring Boot 将请求参数映射到扩展
org.springframework.data.domain.PageRequest
的
AbstractPageRequest
AbstractPageRequest implements Pageable, Serializable {
...
private final int page;
private final int size;
public long getOffset() {
return (long)this.page * (long)this.size;
}
...
您应该使用以下网址:
http://localhost:8080?page=3&size=5
您还可以添加排序...&sort=name
Spring boot
Pageable
支持以下 url 参数 OOTB:
示例端点:
@GetMapping
public ResponseEntity<?> getUsers(Pageable pageable) {
try {
return ResponseEntity.status(HttpStatus.OK).body(userService.getUsers(pageable));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
样品请求:
localhost:8080/users?page=2&size=5&sort=createdAt,DESC
示例响应(注意下面的寻呼数据):
{
"content": [
...
],
"pageable": {
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 10,
"pageNumber": 2,
"pageSize": 5,
"paged": true,
"unpaged": false
},
"last": false,
"totalPages": 12,
"totalElements": 58,
"size": 5,
"number": 2,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"numberOfElements": 5,
"first": false,
"empty": false
}