iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

概述

在確定有撈取到分頁資料後,今天會實作排序的功能,參數上可以設定要依照什麼欄位來做排序。

Controller 層

需要在 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);
    }

Service 層

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 測試

可以在 API 中加入sort 的參數,如:

http://localhost:8080/api/posts?pageNo=0&pageSize=5&sortby=title

按下 GET 後,就可以看到下方結果會按照 title 的字母排序~

這邊先記錄到初步排序的方式,明天會更深入的講解排序的細節喔~

有興趣的夥伴們記得來看喔~

此外,若文中有錯誤之處還請多多包涵與指正, 歡迎在文章下方留言一起討論喔!

明天見~


上一篇
Day11 Java Spring API 實作 — Pagination and 排序 Part2
下一篇
Day13 Java Spring API 實作 — 排序 Part2
系列文
Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言