在資料排序中,除了選定要按照什麼欄位來做排序外,也會設定排序的性質,是降冪: 字母後到前、數字大到小;或是升冪: 字母前到後、數字小到大。所以今天會實作選擇排序性質的 AP。
首先是設定路徑參數的位置,需要在 getAllPost() 的參數中加入以下參數值,這個參數預設為 asc,如下程式碼:
@RequestParam(value=”sortDir”, defaultValue=”asc”, required=false) String sortDir
完整版:
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){
@RequestParam(value=”sortDir”, defaultValue=”asc”, required=false) String sortDir
return postService.getAllPosts(pageNo, pageSize,sortby,sortDir);
}
記得在 return 的參數值中也要新增 sortDir 喔~
在 Service Interface 的 PostService.java 中同樣要帶入可以控制 order 形式的參數
PostResponse getAllPosts(int pageNo int pageSize, String sortby, String sortDir);
)
而在其 Instance class : PostServiceImpl.java 中,在 getAllPost() 參數中也要加入 sortDir 的參數內容,才能在給定路徑的 query 篩選時接收到資料設定
在功能實作中,則需要建立一個 Sort 的物件,使用條件式,分別各回傳排序好的物件,如下:
Sort sort = sortDir.equalsIgnore(Sort.Direction.ASC.name()) ? Sort.by(sortby).ascending():
Sort.by(sortby).descending();
回傳排序好的資料到 sort 後,PageRequest 這邊接收到的資料也要是排序好的物件內容,如下:
Pageable pageable.of(pageNo, pageSize, sort);
http://localhost:8080/api/posts?pageNo=0&pageSize=5&sortby=title&sortDir=asc
sortDir 後可以放升冪 asc 或是 降冪 desc,放完後使用 GET,按下 Send 後就可以看到對應的排序資料了喔~
到這邊,學到了排序性質的選擇實作~ 明天會接續討論及實作其他功能。敬請期待~
此外,若文中有錯誤之處還請多多包涵與指正, 歡迎在文章下方留言一起討論喔!
明天見~