개발

스프링 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 boot pagination and sorting example - HowToDoInJava

Learn to request and display only chunk of data from database using pagination and sorting inputs and query parameters in spring boot and spring data apps.

howtodoinjava.com

 

 

그런데, 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

 

4. Paging and Sorting

Rather than return everything from a large result set, Spring Data REST recognizes some URL parameters that will influence the page size and starting page number. To add paging support to your Repositories, you need to extend the PagingAndSortingRepository

docs.spring.io

공식 문서에 보면 

"Spring Data REST also recognizes sorting parameters that will use the Repository sorting support."

Spring Data REST가 sorting 파라미터를 recognize한다고 나와있다.

 

PageRequest.of를 써야 될 때가 있겠지만, 현재로서는 쓰지 않고도 제 기능을 해서 만족한다.