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}

Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串的更多相关文章

  1. qjson中把记录或类型或泛型数组转换为json字符串

    unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  2. ajax+json模态框中分页(spring+struts+mybatis+easyui分页插件)

    0.业务需求: 点击每个数字的时候可以显示每个对应的详细记录.也就是得点击11的时候拿着开采部与C级去查询.

  3. spring boot(二)整合mybatis plus+ 分页插件 + 代码生成

    先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...

  4. Mybatis的分页插件PageHelper

    Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper  文档地址:http://git.oschina. ...

  5. Mybatis 的分页插件PageHelper-4.1.1的使用

    Mybatis 的分页插件 PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper  文档地址:http://git.oschin ...

  6. SpringBoot集成MyBatis的分页插件 PageHelper

    首先说说MyBatis框架的PageHelper插件吧,它是一个非常好用的分页插件,通常我们的项目中如果集成了MyBatis的话,几乎都会用到它,因为分页的业务逻辑说复杂也不复杂,但是有插件我们何乐而 ...

  7. Mybatis之分页插件pagehelper的简单使用

    最近从家里回来之后一直在想着减肥的事情,一个月都没更新博客了,今天下午没睡午觉就想着把mybatis的分页插件了解一下,由于上个月重新恢复了系统,之前创建的项目都没了,又重新创建了一个项目. 一.创建 ...

  8. jQuery分页插件(jquery.page.js)的使用

    效果描述: 不用分页即可显示的jQuery插件 jQuery分页插件——jQuery.page.js用法很简单,效果很棒   1.前端   首先html的head中引入相关css与js <lin ...

  9. struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)

    JSON主要创建如下两种数据对象: 由JSON格式字符串创建,转换成JavaScript的Object对象: 由JSON格式字符串创建,转换成JavaScript的List或数组链表对象. 更多关于J ...

随机推荐

  1. [UE4]产生开枪特效

  2. ThinkPHP 5使用 Composer 组件名称可以从https://packagist.org/ 搜索到

    http://www.phpcomposer.com/ 1 这个是国内的composer网站 thinkphp5自带了composer.phar组件,如果没有安装,则需要进行安装 以下命令全部在项目目 ...

  3. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  4. linux常用命令解析

    linux下一些注意事项 1. linux下严格区分大小写 ls 简述:列出文件或目录列表. -> ls 默认列出当前目录下的所有文件. -> ls -l(long)以长格式查看文件. - ...

  5. IO流程及优化

    http://blog.csdn.net/xypzwl/article/details/51416883 一.存储设备的存储原理 机械硬盘: 机械硬盘使用磁性物质作为存储介质,用N.S极性来代表0或1 ...

  6. SpringBoot整合定时任务task

    @SpringBootApplication //扫描 mybatis mapper 包路径 @MapperScan(basePackages = "com.imooc.mapper&quo ...

  7. 原型模式(ProtoType)

    用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节. .Net 在 system 命名空间中提供了I ...

  8. python函数入门

    知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一.函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方 ...

  9. 怎么理解Linux软中断?

    1.什么是中断 中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求. 2.为什么要有中断呢? "举个生活中的例子" ...

  10. python学习中的第一个例子

    搭建python 先学习下当小白鼠 1 看下自己的python版本 python -v 2 然后,用pip安装开发Web App需要的第三方库: 异步框架aiohttp: pip3 install a ...