개발
스프링 Paging 및 Parameters
시간의 효율화
2022. 3. 18. 17:39
public Page<Feed> getFeedResponses(@RequestParam("page") int page,
@RequestParam("size") int size,
@RequestParam("sortBy") String sortBy,
@RequestParam("isAsc") boolean isAsc) {
page = page - 1;
return feedService.getFeeds(page, size, sortBy, isAsc);
보통은 paging 할 때, 저렇게 파라미터를 다 전달한 다음,
Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;
Sort sort = Sort.by(direction, sortBy);
Pageable pageable = PageRequest.of(page, size, sort);
return feedRepository.findAll(pageable);
PageRequest.of를 사용해서 처리한다.
https://howtodoinjava.com/spring-boot2/pagination-sorting-example/
그런데, Spring Data REST는 저런 설정을 사용하지 않아도 pageable를 사용하면, 클라이언트에서 보내는 파리미터를 알아서 처리하는 것 같다.
@GetMapping("/qna")
public HttpEntity<PagedModel<?>> getQnaAll(Pageable pageable){
Page<QnaResponseDto> qnaResponseDto = qnaService.getQnaAll(pageable).map(QnaResponseDto::toDto);
return ResponseEntity.ok().contentType(MediaTypes.HAL_JSON).body(pagedResourcesAssembler.toModel(qnaResponseDto, qnaModelAssembler));
}
다음과 같은 파라미터를 보내면
qna?page=0&size=5&sort=title,asc&sort=id,desc
pageable에 필요한 내용이 다 들어간다.
그래서 입력값을 프린트 해보면,
0 // page
5 // page size
title: ASC,id: DESC // sort
이렇게 찍힌다.
https://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html
공식 문서에 보면
"Spring Data REST also recognizes sorting parameters that will use the Repository sorting support."
Spring Data REST가 sorting 파라미터를 recognize한다고 나와있다.
PageRequest.of를 써야 될 때가 있겠지만, 현재로서는 쓰지 않고도 제 기능을 해서 만족한다.