iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

概述

在資料排序中,除了選定要按照什麼欄位來做排序外,也會設定排序的性質,是降冪: 字母後到前、數字大到小;或是升冪: 字母前到後、數字小到大。所以今天會實作選擇排序性質的 AP。

Controller 層

首先是設定路徑參數的位置,需要在 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 層

在 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);

API 測試

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

sortDir 後可以放升冪 asc 或是 降冪 desc,放完後使用 GET,按下 Send 後就可以看到對應的排序資料了喔~

到這邊,學到了排序性質的選擇實作~ 明天會接續討論及實作其他功能。敬請期待~

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

明天見~


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

尚未有邦友留言

立即登入留言