spring page 처리하기 -정렬(sort) 포함
service - interface
PostResponse getAllPost(int pageNo, int pageSize, String sortBy, String sortDir);
service implemetation ; ==> PostResponse를 정의
@Override
public PostResponse getAllPost(int pageNo, int pageSize, String sortBy, String sortDir) {
Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
//create Pageable instance
Pageable pageable = PageRequest.of(pageNo, pageSize, sort);
Page<Post> posts = postRepository.findAll(pageable);
List<Post> listOfPosts = posts.getContent();
List<PostDto> content = listOfPosts.stream().map(this::mapToDto).toList();
PostResponse postResponse = new PostResponse();
postResponse.setContent(content);
postResponse.setPageNo(posts.getNumber());
postResponse.setPageSize(posts.getSize());
postResponse.setTotalElements(posts.getTotalElements());
postResponse.setTotalPages(posts.getTotalPages());
postResponse.setLast(posts.isLast());
return postResponse;
}
// pageable에 있는 항목 임.
@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;
}
controller 처리
@GetMapping
public PostResponse getPost(
@RequestParam(value = "pageNo", defaultValue = AppConstants.DEFAULT_PAGE_NUMBER,
required = false) int page,
@RequestParam(value = "pageSize", defaultValue = AppConstants.DEFAULT_PAGE_SIZE,
required = false) int size,
@RequestParam(value = "sortBy", defaultValue = AppConstants.DEFAULT_SORT_BY,
required = false) String sortBy,
@RequestParam(value = "sortDir", defaultValue = AppConstants.DEFAULT_SORT_DIR,
required = false) String sortDir) {
return postService.getAllPost(page, size, sortBy, sortDir);
}
==> 출력은 PostReponse 형태로 나타남