iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
SideProject30

Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰系列 第 10

Day 10 Java Spring API 實作 — Pagination and 排序 part1

  • 分享至 

  • xImage
  •  

概述

今天要實作內容分頁呈現以及排序的功能,在 URL 中可以加入一些相關 query 的參數,例如: sortBy=title等來做過濾篩選資料。

Pagination 會有兩個部分: 一個是 page size, 另外一個是 page number。

而在系統架構中,與前幾次 API 實作不同的是,用的 Repository 並不是繼承 ListCrudRepository

而是ListPagingAndSortingRepositoryPagingAndSortingRepository

不過此次在實作的過程中,遇到了一些問題,所以這次並不會成功實做出來,主要是紀錄學習上心路歷程的部分。

Controller 層

在掌管 url 路徑的邏輯中,會需要修改抓取所有資料的 function: getAllPost

需要修改成以下程式:

@GetMapping
    public List<PostDto> getAllPost(){
				@RequestParam(value="pageNo", defaultValue="0", required=false)
        return postService.getAllPosts();
    }

Repository

在 Repository 中,就如剛剛有講到的,會使用 PagingAndSortingRepository

PostRepository 會繼承 JpaRepository ,而 JpaRepository 則會繼承 ListCrudRepository

ListPagingAndSortingRepository

QueryByExampleExecutor

其中的 ListPagingAndSortingRepository 則繼承 PagingAndSortingRepository ,這個就會是這次實作會使用到的 Repository

其中有 Page<T> findAll(Pageable pageable); Iterable<T> findAll(Sort sort); 會用來尋找資料並呈現相對應頁面的內容~

Service 層

PostService.java 中需要修改 getAllPosts() 裡面所帶入的參數內容,如下:

List<PostDto> getAllPosts(int pageNo,int pageSize);

PostServiceImpl.java 的 getAllPost() 中需要放入 page number 以及 page size 這兩個參數。

不過這邊就是出錯的部分,理應在 Repository 有繼承 Page 相關的實作形式後,就可以使用 Pageable 以及 PageRequest 的 class,並不需要做轉換,但這裡會報錯,會需要做轉換才能運行~ 這樣就無法在下方的 findAll() 中正確使用 pageable 的變數

public List<PostDto> getAllPosts(int pageNo, int pageSize) {
        // create Pageable instance
        Pageable pageable =PageRequest.of(pageNo, pageSize);
        Page<Post> posts = postRepository.findAll(pageable);

        //get content for page object
        List<Post> listOfPosts = posts.getContent();
        return posts.stream().map(post->mapToDTO(post)).collect(Collectors.toList());

    }

這邊先記錄到出錯的部分,下一篇會記錄 debug 以及解決方法~

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

此外,若文中有錯誤之處還請多多包涵與指正,或是知道要如何解決的大神們也歡迎在下方留言指點我,小妹將萬分感謝~~ 歡迎在文章下方留言一起討論喔!

明天見~


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

尚未有邦友留言

立即登入留言