最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot?把PageHelper分頁信息返回給前端的方法步驟

 更新時間:2024年01月12日 09:37:12   作者:張紫娃  
本文主要介紹了SpringBoot?把PageHelper分頁信息返回給前端的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

第1步:定義線程容器收納HttpHeaders和HttpStatus

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;


public class ResponseUtils {
    private static ThreadLocal<HttpHeaders> ThreadLocalHeaders = new InheritableThreadLocal<>();
    private static ThreadLocal<HttpStatus> ThreadLocalStatus = new InheritableThreadLocal<>();

    public static void addHeaders(String key, String value) {
        if (ThreadLocalHeaders.get() == null) {
            ThreadLocalHeaders.set(new HttpHeaders());
        }
        ThreadLocalHeaders.get().add(key, value);
    }

    public static void setResponseCode(HttpStatus httpStatus) {
        ThreadLocalStatus.set(httpStatus);
    }

    public static HttpHeaders getHeaders() {
        return ThreadLocalHeaders.get();
    }

    public static HttpStatus getResponseCode() {
        return ThreadLocalStatus.get();
    }

    public static void clear() {
        if (ThreadLocalHeaders.get() != null) {
            ThreadLocalHeaders.remove();
        }
        if (ThreadLocalStatus.get() != null) {
            ThreadLocalStatus.remove();
        }
    }
}

第2步:分頁信息 轉(zhuǎn)儲到 線程容器 方法的封裝

import com.github.pagehelper.PageInfo;
import com.zhangziwa.practisesvr.utils.response.ResponseUtils;

public class PageHeaderUtils {
    private static final String PAGE_NUM = "page_num"; // 當(dāng)前第幾頁
    private static final String PAGE_SIZE = "page_size"; // 每頁顯示的條數(shù)
    private static final String PREV_PAGE = "prev_page"; // 上一頁頁碼
    private static final String NEXT_PAGE = "next_page"; // 下一頁頁碼
    private static final String TOTAL_COUNT = "total_count"; // 總條數(shù)
    private static final String TOTAL_PAGE = "total_page"; // 總頁數(shù)

    public static <E> void setPageHeader(PageInfo<E> page) {
        if (page == null) {
            return;
        }
        ResponseUtils.addHeaders(PAGE_NUM, String.valueOf(page.getPageNum()));
        ResponseUtils.addHeaders(PAGE_SIZE, String.valueOf(page.getPageSize()));
        ResponseUtils.addHeaders(TOTAL_COUNT, String.valueOf(page.getTotal()));
        ResponseUtils.addHeaders(TOTAL_PAGE, String.valueOf(page.getPages() == 0 ? 1 : page.getPages()));
        // page.getPages()=1表示就1頁,前后頁都不存在,故也算特殊場景.也為了page.getPages()+1和page.getPages()-1不會對[1,page.getPages()]越界
        if (page.getPages() == 0 || page.getPages() == 1) {
            ResponseUtils.addHeaders(PREV_PAGE, "");
            ResponseUtils.addHeaders(NEXT_PAGE, "");
        } else if (page.getPageNum() == 1) {
            ResponseUtils.addHeaders(PREV_PAGE, "");
            ResponseUtils.addHeaders(NEXT_PAGE, String.valueOf(page.getPages() + 1));
        } else if (page.getPageNum() == page.getPages()) {
            ResponseUtils.addHeaders(PREV_PAGE, String.valueOf(page.getPages() - 1));
            ResponseUtils.addHeaders(NEXT_PAGE, "");
        } else {
            ResponseUtils.addHeaders(PREV_PAGE, String.valueOf(page.getPages() - 1));
            ResponseUtils.addHeaders(NEXT_PAGE, String.valueOf(page.getPages() + 1));
        }
    }
}

第3步:分頁查詢,HttpHeaders和HttpStatus收集到線程容器中

public List<Student> listStudents(Integer pageNum, Integer PageSize) {
    PageHelper.startPage(PageUtils.getPageNum(pageNum), PageUtils.getPageSize(PageSize), PageUtils.isQueryTotalCount());
    PageHelper.orderBy("age asc");
    
    List<Student> students = userMapper.listStudents();
    PageInfo<Student> studentPageInfo = PageInfo.of(students);
    
    // 收集分頁信息到 ThreadLocal
    PageHeaderUtils.setPageHeader(studentPageInfo);
    // 收集HttpStatus到 ThreadLocal
    // ResponseUtils.setResponseCode(num2HttpStatus("200")); // 為了使用一下num2HttpStatus方法
    ResponseUtils.setResponseCode(HttpStatus.OK);
    return students;
}
public class HttpStatusUtils {

    public static HttpStatus num2HttpStatus(String num) {
        HttpStatus httpStatus = HttpStatus.NOT_FOUND;
        for (HttpStatus status : HttpStatus.values()) {
            if (Integer.parseInt(num) == status.value()) {
                return status;
            }
        }
        return httpStatus;
    }
}

第4步:controller層需為@RestController Restful接口

@RestController
@Slf4j
public class SearchController {
    @Autowired
    UserService userService;

    @RequestMapping(value = "/getAllStudents", method = RequestMethod.GET)
    public List<Student> login() {
        List<Student> students = userService.listStudents(1, 10);
        students.forEach(System.out::println);
        return students;
    }
}

第5步:線程容器收納HttpHeaders和HttpStatus添加到ServerHttpResponse

@ControllerAdvice
public class HttpResponseBodyAdvice implements ResponseBodyAdvice {


    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class clazz,
                                  ServerHttpRequest request, ServerHttpResponse response) {
        HttpHeaders headers = response.getHeaders();

        // 分頁信息添加到ServerHttpResponse
        HttpHeaders headersContext = ResponseUtils.getHeaders();
        if (nonNull(headersContext) && !headersContext.isEmpty()) {
            headers.addAll(headersContext);
        }

        // 狀態(tài)碼添加到ServerHttpResponse
        if (nonNull(ResponseUtils.getResponseCode())) {
            response.setStatusCode(ResponseUtils.getResponseCode());
        }
        return body;
    }
}

第6步:測試結(jié)果

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于SpringBoot 把PageHelper分頁信息返回給前端的方法步驟的文章就介紹到這了,更多相關(guān)SpringBoot PageHelper分頁信息返回內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java 并發(fā)編程:volatile的使用及其原理解析

    Java 并發(fā)編程:volatile的使用及其原理解析

    下面小編就為大家?guī)硪黄狫ava 并發(fā)編程:volatile的使用及其原理解析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • SpringSecurity詳解整合JWT實現(xiàn)全過程

    SpringSecurity詳解整合JWT實現(xiàn)全過程

    JWT作為一個開放的標準(?RFC?7519?),定義了一種簡潔的,自包含的方法用于通信雙方之間以Json對象的形式安全的傳遞信息。接下來通過本文給大家介紹springSecurity+jwt實現(xiàn)互踢功能,需要的朋友可以參考下
    2022-07-07
  • Java 17 隨機數(shù)生成器來了一波穩(wěn)穩(wěn)的增強

    Java 17 隨機數(shù)生成器來了一波穩(wěn)穩(wěn)的增強

    JDK 當(dāng)中的隨機數(shù)生成器其實對于普通開發(fā)者來講基本夠用,不過對于一些比較復(fù)雜的場景來講,原有的類結(jié)構(gòu)對擴展并不是很友好,除了 Random 類,JDK 當(dāng)中還提供了另外幾個隨機數(shù)的成員,下面文章將詳細介紹,需要的朋友可以參考一下
    2021-09-09
  • Java中使用opencsv讀寫csv文件示例

    Java中使用opencsv讀寫csv文件示例

    這篇文章主要介紹了Java中使用opencsv讀寫csv文件示例,本文給出了讀CSV文件、寫CSV文件、自定義分隔符、生成Javabeans等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Mybatis plus枚舉處理器的具體使用

    Mybatis plus枚舉處理器的具體使用

    在開發(fā)中,數(shù)據(jù)庫表中的字段很常見會使用枚舉類型來表示一些固定的取值范圍,本文主要介紹了Mybatis plus枚舉處理器的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    這篇文章主要介紹了Java容器ArrayList原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java實現(xiàn)掃雷游戲詳細代碼講解

    Java實現(xiàn)掃雷游戲詳細代碼講解

    windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用Java語言實現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Java計時器StopWatch實現(xiàn)方法代碼實例

    Java計時器StopWatch實現(xiàn)方法代碼實例

    這篇文章主要介紹了Java計時器StopWatch實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java無鎖隊列 Disruptor 的原理深度解析

    Java無鎖隊列 Disruptor 的原理深度解析

    Disruptor是一個高性能的、無鎖的、零等待的、多線程間數(shù)據(jù)交換工具,適用于高并發(fā)場景,本文給大家介紹Java無鎖隊列Disruptor 的原理解析,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • SpringBoot集成mybatis實例

    SpringBoot集成mybatis實例

    本篇文章主要介紹了SpringBoot集成mybatis實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論

临邑县| 江孜县| 樟树市| 扶余县| 宁都县| 甘谷县| 西安市| 遂宁市| 德阳市| 长垣县| 平南县| 米脂县| 东乡县| 屯门区| 沾益县| 甘孜县| 牡丹江市| 鲁甸县| 漠河县| 高陵县| 孟州市| 武安市| 重庆市| 三明市| 苗栗县| 上杭县| 宣汉县| 寻甸| 乌拉特前旗| 桃江县| 柳江县| 平陆县| 南通市| 婺源县| 祁阳县| 福泉市| 堆龙德庆县| 钟祥市| 阜康市| 台东县| 贵南县|