기존 페이징 처리는 page 수만 유저가 원하는 페이징 처리를 할수 있게 했는데 , 추가적으로 정렬순, 정렬기준 또한 유저가 정할 수 있게 하는 것이 미션
@Transactional
public List<PostsResponse> getPostsList(int pageChoice){
Page<Posts> postsListPage = postsRepository.findAll(PageRequest.of(pageChoice-1,4,Sort.Direction.DESC,"id"));//페이징 셋팅
if(postsListPage.isEmpty()){
throw new IllegalArgumentException("해당 페이지가 존재하지 않습니다.");
}
List<PostsResponse> postsListResponseList = postsListPage.stream().map(PostsResponse::new).collect(Collectors.toList());
return postsListResponseList;
}
📌 고객이 원하는 방식의 페이징 방법
Control단
@GetMapping("/keyword")
public List<PostResponse> searchByKeyword(
@RequestParam String keyword,
@RequestParam(value = "page", required = false, defaultValue = "1") int page,
@RequestParam(value = "size", required = false, defaultValue = "2") int size,
@RequestParam(value = "direction", required = false) Direction direction,
@RequestParam(value = "properties", required = false) String properties
) {
return userService.searchByKeyword(keyword, page, size, direction, properties);
}
Service 단
public List<PostResponse> searchByKeyword(String keyword, int page, int size,
Direction direction, String properties) {
String title = keyword;
String content = keyword;
Page<Post> postsListPage = postsRepository.findAllByTitleContainingOrContentContaining(title,
content,
PageRequest.of(page - 1, size, direction, properties));
List<PostResponse> postResponseList = postsListPage.stream().map(PostResponse::new)
.collect(Collectors.toList());
return postResponseList;
}
명세에 따라 메서드를 구현 했는데 정작 포스트맨에 어떤값으로 direction을 넣어줘야 하나 고민이어서 ,
direction 값으로 desc 하니 포스트맨에서 에러발생...
혹시? 나 해서 Sort.by(Direction.DESC, ..) 에서 대문자 썼던게 생각나서 대문자로 넣어줬더니 해결되었다.
여러페이징 처리 과정을 거치면서 최근에 ㅎ 한 페이징 처리 중 가장 명쾌하다.