Skipalong's tistory
231215 TIL - Paging, Sorting 본문
오늘은 개인과제 중에 게시글 목록을 조회 하는데 반환값으로 그냥 게시글 목록이 아닌 page로 관리해서 설정값을 준뒤 정렬까지 해서 반환하는 부분을 처음 해 보았다.
우선 페이지로 관리하는 부분과 필드값을 지정해서 정렬하는기능은 이전에 강의를 들은 적이 있어서 생각보다 쉽게 구현을 했다.
우선 반환 타입을 Page<PostResponseDto> 로 정하고 @RequestParam으로
몇 페이지를 볼 지 정하는 int page,
한 페이지에 몇 개의 게시글을 볼 지 정하는 int size,
어떤 필드로 정렬을 할 지 정하는 String sortBy,
내림차순으로 할 지 오름차순으로 할 지 정하는 boolean isAsc 를 파라미터로 받으면
Service단에서 받아온 파라미터를 가지고
Sort.Direction 을 선언해주고 Sort객체를 Sort.by(direction, sortBy)로 생성해준 뒤
Pageable 객체를 PageRequest.of(page, size, sort) 형식으로 정의해준 뒤
repository에서 findAll 메서드에 pageable을 메서드로 넣으면 Page형식의 게시글 리스트를 반환하게 된다.
그리고 Page클래스의 map 메서드를 이용해서 게시글 리스트를 PostResponseDto형식으로 반환해줄 수 있게 된다. 이렇게 하면 Postman 에서 parameter에 page, size, sortBy, isAsc를 정의해주면 게시글들을 몇번째 페이지, 한 페이지당 몇 개의 게시글, 어떤 필드를 가지고 오름/내림차순으로 페이징할 수 있게 된다.
그런데 과제의 요구사항에는 작성자명 기준 오름차순 and 작성시간 기준 오름차순으로 정렬을 하라고 요구하고 있었다. 지금까지 해놓은 코드에서는 필드를 하나를 정해서 오름/내림 차순으로 정렬하는 것이었는데 과제에서는 두 가지 이상의 필드를 정해서 정렬을 하라고 요구하고 있었다.
여기서 문제 해결을 위해서 sortBy와 isAsc를 List<String> 형식으로 RequestParam을 받고
서비스 레이어에서 sort를 stream 을 통해서 "," 앞의 값을 기준이 될 필드로 정의하고 뒤의 값을 오름차순으로 할지 내림차순으로 할 지 정의할 수 있는 Sort.Order 객체를 List<Sort.Order>형식으로 반환해준 뒤 Pageable 형식으로 반환하게 되면 RequestParam에 sort를 여러가지 를 정의해서 과제의 요구 사항을 만족시킬 수 있는 기능을 구현할 수 있게 되었다.
오늘도 이렇게 새로운 기능을 구현하게 되어서 어제보다 한 걸음 더 나아간 것 같다. 스프링을 배우다 보니 List관련된 부분을 stream을 정말 많이 사용하여 처리하는 것을 계속 느끼고 아직 stream 에 대한 이해가 많이 부족하기 때문에 stream으로 List를 다루는 방법을 알아봐야 할 것 같다.
'TIL' 카테고리의 다른 글
231219 TIL - JpaRepository (1) | 2023.12.19 |
---|---|
231218 TIL -Scheduler, Cron (0) | 2023.12.18 |
231214 TIL - @PropertySource, @Value (0) | 2023.12.14 |
231213 TIL - Email인증 성공 (0) | 2023.12.13 |
231212 TIL - Email인증 실패 (0) | 2023.12.13 |