You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot博客分页调用QPageRequest报ClassNotFoundException错误求解

问题原因及解决方案

错误原因

  • 直接诱因:代码中使用了QueryDSL专属的分页类QPageRequest,但项目没有引入QueryDSL核心依赖,导致JVM加载类时找不到com.querydsl.core.types.OrderSpecifier依赖类,抛出类未找到异常。
  • 冗余使用问题:JPQL已经手动配置了按发布时间倒序的排序规则,完全不需要使用QueryDSL的分页类,属于多余引入不必要的组件。
  • 额外隐藏问题:当前代码中错误导入了java.awt.print包下的Pageable类,该类是Java打印相关API,和Spring Data的分页功能完全无关,后续也会引发其他异常。

解决方案

方案一(推荐,无需额外依赖)

替换所有QPageRequest为Spring Data原生分页类,修正错误导包即可:

  1. 修正BlogRepository代码,替换参数类型、删除错误导包:
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.example.demo.Blog;
import java.util.List;

@Repository
public interface BlogRepository extends JpaRepository<Blog, Long>{
    
    @Query("SELECT b FROM Blog b LEFT JOIN FETCH b.user ORDER BY b.date DESC")
    List<Blog> findLatest5Blogs(PageRequest pageRequest);
}
  1. 修正BlogServiceImpl的findLatest5方法:
@Override
public List<Blog> findLatest5() {
    // PageRequest.of是Spring Data 2.x+推荐的构造方法,旧版new PageRequest已过时
    return this.blogrepo.findLatest5Blogs(PageRequest.of(0, 5));
}
  1. 全局检查删除所有java.awt.print相关的分页类导入,统一使用org.springframework.data.domain包下的分页相关类。

方案二(仅后续需使用QueryDSL时选择)

在项目构建配置中引入QueryDSL依赖即可解决类找不到问题:
Maven pom.xml新增依赖:

<dependencies>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>5.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

引入后还需配置QueryDSL注解处理器生成查询实体类,即可正常使用QPageRequest相关功能。

内容的提问来源于stack exchange,提问作者Dimitar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:36:02