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原生分页类,修正错误导包即可:
- 修正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); }
- 修正BlogServiceImpl的findLatest5方法:
@Override public List<Blog> findLatest5() { // PageRequest.of是Spring Data 2.x+推荐的构造方法,旧版new PageRequest已过时 return this.blogrepo.findLatest5Blogs(PageRequest.of(0, 5)); }
- 全局检查删除所有
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
相关产品推荐
相关产品推荐

