在確定有撈取到分頁資料後,今天會實作排序的功能,參數上可以設定要依照什麼欄位來做排序。
需要在 getAllPosts() 加入 sort 的參數,這樣才能在 URL 上去處理排序的設定。
public PostResponse getAllPost(
@RequestParam(value="pageNo", defaultValue="0", required=false) int pageNo,
@RequestParam(value="pageSize",defaultValue="10", required=false) int pageSize,
@RequestParam(value="sortby",defaultValue="id",required=false) String sortby){
return postService.getAllPosts(pageNo, pageSize);
}
在 PostServiceImpl.java class 中加入使用 Sort.by 來執行排序的功能
@Override
public PostResponse getAllPosts(int pageNo, int pageSize, String sortby) {
Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by(sortby));
Page<Post> posts = postRepository.findAll(pageable);
List<Post> listOfPosts = posts.getContent();
List<PostDto> content = posts.stream().map(post->mapToDTO(post)).collect(Collectors.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;
}
在 PostService.java 的 getAllPosts() 中加入一個新的參數,這樣才能帶到要排序的資料。
PostResponse getAllPosts(int pageNo, int pageSize, String sortby);
可以在 API 中加入sort 的參數,如:
http://localhost:8080/api/posts?pageNo=0&pageSize=5&sortby=title
按下 GET 後,就可以看到下方結果會按照 title 的字母排序~
這邊先記錄到初步排序的方式,明天會更深入的講解排序的細節喔~
有興趣的夥伴們記得來看喔~
此外,若文中有錯誤之處還請多多包涵與指正, 歡迎在文章下方留言一起討論喔!
明天見~