zoukankan      html  css  js  c++  java
  • Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串

            Page<User> page = new Page<>();
            User user = new User();
            user.setAge(20);
            user.setId(1);
            System.out.println(JSON.toJSONString(user));
            page.add(user);
            page.setPageNum(2);
            page.setPageSize(20);
            //Page<E> 继承了ArrayList<E>
            System.out.println(JSON.toJSONString(page));

    结果:

    这里使用阿里的fastjson做测试

    user:{"age":20,"id":1}
    page:[{"age":20,"id":1}]

    分析原因:

        分页对象public class Page<E> extends ArrayList<E> 继承了ArrayList集合.所以序列化Page对象时也就是在序列化一个ArrayList集合.这样的话,只会将集合中的元素E序列化出来.也不会将Page的属性pageSize,pageNum 序列化.

    解决方法:

       将Page<E>封装成一个对象-PageInfo.就是说将这个list封装成一个普通的java对象,而非list集合.

    public class PageInfo<T> implements Serializable {
        private static final long serialVersionUID = 1L;
        //当前页
        private int pageNum;
        //每页的数量
        private int pageSize;
        //当前页的数量
        private int size;
        //排序
        private String orderBy;

        //由于startRow和endRow不常用,这里说个具体的用法
        //可以在页面中"显示startRow到endRow 共size条数据"

        //当前页面第一个元素在数据库中的行号
        private int startRow;
        //当前页面最后一个元素在数据库中的行号
        private int endRow;
        //总记录数
        private long total;
        //总页数
        private int pages;
        //结果集
        private List<T> list;

        //第一页
        private int firstPage;
        //前一页
        private int prePage;
        //下一页
        private int nextPage;
        //最后一页
        private int lastPage;

        //是否为第一页
        private boolean isFirstPage = false;
        //是否为最后一页
        private boolean isLastPage = false;
        //是否有前一页
        private boolean hasPreviousPage = false;
        //是否有下一页
        private boolean hasNextPage = false;
        //导航页码数
        private int navigatePages;
        //所有导航页号
        private int[] navigatepageNums;

        public PageInfo() {
        }

    //…

    }

    貌似作者已经考虑到这种情况,在Page<E>对象中实现了对PageInfo的封装.

    /**
    * 转换为PageInfo
    *
    * @return
    */
    public PageInfo<E> toPageInfo() {
        PageInfo<E> pageInfo = new PageInfo<E>(this);
        return pageInfo;
    }

    所以:

    @Test
        public void test2(){
            Page<User> page = new Page<>();
            User user = new User();
            user.setAge(20);
            user.setId(1);
            System.out.println("user:"+JSON.toJSONString(user));
            page.add(user);
            page.setPageNum(2);
            page.setPageSize(20);
            //Page<E> 继承了ArrayList<E>
            System.out.println("page:"+JSON.toJSONString(page));
            //PageInfo 对Page<E>结果进行包装
            System.out.println(JSON.toJSONString(page.toPageInfo()));
        }

    结果:

    user:{"age":20,"id":1}
    page:[{"age":20,"id":1}]
    {"endRow":0,"firstPage":1,"hasNextPage":false,"hasPreviousPage":false,"isFirstPage":true,"isLastPage":true,"lastPage":1,"list":[{"age":20,"id":1}],"navigatePages":8,"navigatepageNums":[1],"nextPage":0,"pageNum":1,"pageSize":1,"pages":1,"prePage":0,"size":1,"startRow":0,"total":1}

  • 相关阅读:
    Luogu P1169 [ZJOI2007]棋盘制作 及悬线法浅谈
    P4338 [ZJOI2018]历史 P3703 [SDOI2017]树点涂色 题解
    多省联考2020游记
    min_25筛基础
    斯特林数、贝尔数与伯努利数基础
    后缀数组笔记
    分治FFT学习笔记
    多项式运算表
    基本积分公式表
    THUWC2019游记
  • 原文地址:https://www.cnblogs.com/a198720/p/6164442.html
Copyright © 2011-2022 走看看