[TIL] 23.02.08

hyewon jeong·2023년 2월 8일
0

TIL

목록 보기
86/138

1 . 문제점

기존 페이징 처리는 page 수만 유저가 원하는 페이징 처리를 할수 있게 했는데 , 추가적으로 정렬순, 정렬기준 또한 유저가 정할 수 있게 하는 것이 미션


2 . 시도한 점

@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;
  }

3 . 해결

명세에 따라 메서드를 구현 했는데 정작 포스트맨에 어떤값으로 direction을 넣어줘야 하나 고민이어서 ,
direction 값으로 desc 하니 포스트맨에서 에러발생...

혹시? 나 해서 Sort.by(Direction.DESC, ..) 에서 대문자 썼던게 생각나서 대문자로 넣어줬더니 해결되었다.

여러페이징 처리 과정을 거치면서 최근에 ㅎ 한 페이징 처리 중 가장 명쾌하다.


profile
개발자꿈나무

0개의 댓글