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

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,提问作者Артем Косенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:03