Spring Pagination
Spring에서 Pagination을 적용할 때는 Flutter에서 적용할 때처럼 그런 무지막지한 과정이 없다. (옛날에는 있었지만 지금은 Spring Web에서 처리를 해준다.)
Api Model 생성
Response를 내려줄 Api를 생성해준다.
public class Api<T> {
private T body;
private Pagination pagination;
}
Pagination Model 생성
실제로 Pagination을 처리해줄 Model을 생성한다. 각 필드의 역할은 주석으로 적어놓은 다음과 같다.
public class Pagination {
private Integer page; // 몇 번째 페이지를 보여줄지
private Integer size; // 한 페이지에 보여줄 elements 수
private Integer currentElements; // 현재 return된 elements 수
private Integer totalPages; // 최대 페이지
private Long totalElements; // 전체 elements 수
}
PageableDefault 설정
PostApiController
@GetMapping("all")
public Api<List<PostEntity>> list(
// direction = Sort.Direction.DESC : 역순(최신순) 기본은 ASC임
@PageableDefault(page = 0, size = 10, sort = "id", direction = Sort.Direction.DESC)
Pageable pageable
) {
return postService.all(pageable);
}
Service에서 Pagination 적용
PostService
public Api<List<PostEntity>> all(Pageable pageable) {
Page<PostEntity> list = postRepository.findAll(pageable);
Pagination pagination = Pagination.builder()
.page(list.getNumber())
.size(list.getSize())
.currentElements(list.getNumberOfElements())
.totalElements(list.getTotalElements())
.totalPages(list.getTotalPages())
.build();
return Api.<List<PostEntity>>builder()
.pagination(pagination)
.body(list.toList())
.build();
}