这个异常 java.lang.ClassCastException
表示你尝试将一个 ArrayList
类型的对象强制转换为 com.github.pagehelper.Page
类型,但这两个类型是不兼容的。这通常发生在你期望得到一个 Page
对象,但实际上得到了一个 ArrayList
。
源代码应用实例如下
@Override
public PageBean<Article> getList(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
// 创建PageBean对象
PageBean<Article> pb = new PageBean<>();
// 开启分页查询
PageHelper.startPage(pageNum, pageSize);
// 获取当前用户的ID
Integer userId = ThreadLocalUtil.getId();
// 查询数据
Page<Article> page = (Page<Article>) articleMapper.getlist(userId, categoryId, state);
//把数据填充到pb中
pb.setTotal(page.getTotal());
pb.setItems(page.getResult());
return pb;
}
解决的方法就是将pageHelper的版本换成最新版的1.4.6
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
在 PageHelper 的1.4.6版本中,当你调用 PageHelper.startPage()
方法后,它会在内部拦截 MyBatis 的查询操作,并将结果封装在一个 Page
对象中。这个 Page
对象实际上包含了原始的 List
,并且还包含了分页信息,如总记录数、总页数等。
这就使得在执行分页查询后,返回的对象实际上是 Page
类的实例,而不是简单的 List
。这意味着返回的对象本身就是 Page
类型,所以强制转换不会抛出异常。