Pageable 의 page
Pageable 의 page 는 0 부터 시작한다.
아래의 application.yml 파일에 옵션을 추가하여 클라이언트에서 ?page=1 을 호출할 시
limit 0, {size} 쿼리가 나가도록 수정한다.
spring:
data:
web:
pageable:
one-indexed-parameters: true
Slice 객체의 number 필드
JPA 레파지토리에서 반환형을 Slice 로 받을 경우
반환되는 객체의 number 필드가 몇 번째 페이지를 쿼리했는지에 대한 정보를 담고 있다.
위의 yml 파일을 수정해주어도 해당 number 필드는 0부터 시작하고 있다.
이를 따로 Custom Response 를 만들어 반환해주어야 한다. (클라이언트가 원할 시)
data class SeriesContentsResponse(
val seriesTitle: String,
val books: List<BookCover>,
val page: Int,
val isLast: Boolean,
) {
companion object {
fun of(
seriesTitle: String,
books: List<BookCover>,
page: Int,
isLast: Boolean,
): CollectionContentsResponse {
return CollectionContentsResponse(
seriesTitle = seriesTitle,
books = books,
page = page + 1,
isLast = isLast
)
}
}
}
왜 Page 객체가 아닌 Slice 객체를 쓰는가?
JPA에서 Page 객체는 LastPage 를 확인하기 위해 count 쿼리 + 조회쿼리 총 2개가 발생된다.
반면 Slice 객체는 조회쿼리(limit +1) 1개만 발생한다.
아래의 포스팅에서 확인할 수 있다.
Reference