커스텀 페이지네이션 API

jb kim·2022년 3월 3일
0

REST API 블로그 앱

목록 보기
23/65

💥 현재 페이지 리스트 데이터만 클라이언트에 리턴하는 것에서
더하여 총 포스트 숫자 , 전체 페이지 숫자, 현재 페이지가 마지막인지?
이런 정보를 더해서 한꺼번에 클라이언트에 제공하도록 하자.

1. PostResponse 클래스 만들기

위치는 payload 패키지

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PostResponse {
    private List<PostDto> content;  //포스트 리스트
    private int pageNo;             //페이지넘버
    private int pageSize;		 	//페이지당 포스트 수
    private long totalElements; 	//총 포스트 수
    private int totalPages;			//총 페이지 수
    private boolean last;			//마지막 페이지면 true
}

2. PostService

	//모든 포스트들을 가져오기 (페이지네이션)
	PostResponse getAllPosts(int pageNo, int pageSize);

3. PostServiceImpl

	@Override
	public PostResponse getAllPosts(int pageNo, int pageSize) {
		//Pageable 객체 생성
		Pageable pageable = PageRequest.of(pageNo, pageSize);
		//pageable 을 입력해 원하는 페이지의 사이즈만큼 리스트 리턴
		Page<Post> posts = postRepository.findAll(pageable);		
		//페이지객체 안의 리스트만 가져오기
		List<Post> pagePosts = posts.getContent();
		//DTO로 변환하여 리턴
		List<PostDto> content = pagePosts.stream().map(post -> mapToDto(post)).collect(Collectors.toList());
		
		PostResponse postResponse = new PostResponse();
		postResponse.setContent(content);
		postResponse.setPageNo(pageNo);
		postResponse.setPageSize(pageSize);
		postResponse.setTotalElements(posts.getTotalElements());
		postResponse.setTotalPages(posts.getTotalPages());
		postResponse.setLast(posts.isLast());
		
		return postResponse;
	}

profile
픽서

0개의 댓글