Spring RestController测试执行失败 无法实例化Pageable对象问题
问题根因
这个报错是因为Spring MVC未加载Pageable接口对应的参数解析器,Pageable本身是接口无法直接实例化,默认配置下Spring不知道如何将请求分页参数转换为Pageable实例,所以抛出找不到构造方法的异常。
解决方案
1. 项目全局生效配置
在Spring Boot启动类或自定义Web配置类上添加@EnableSpringDataWebSupport注解,该注解会自动注册PageableHandlerMethodArgumentResolver,全局支持Pageable参数解析:
@SpringBootApplication @EnableSpringDataWebSupport public class BlogApplication { public static void main(String[] args) { SpringApplication.run(BlogApplication.class, args); } }
2. 单元测试场景单独配置
如果你使用MockMvc做单元测试,需要手动将Pageable参数解析器注册到MockMvc中,避免测试环境未加载全局配置导致报错:
@Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; @BeforeEach void initMockMvc() { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) // 注册Pageable参数解析器 .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) .build(); }
如果使用@WebMvcTest注解做分层测试,也可以直接导入Spring Data Web的配置类:
@WebMvcTest(MessageController.class) @Import(SpringDataWebConfiguration.class) public class MessageControllerTest { // 测试逻辑 }
3. 依赖检查
确认项目已引入spring-data-commons依赖(使用Spring Data JPA等模块会默认传递引入,无需额外声明),缺失的话补充对应依赖即可。
调整完成后重新运行测试,就能正常解析Pageable参数了。
内容的提问来源于stack exchange,提问作者Артем Косенко
相关产品推荐
相关产品推荐

