可分页实例化在WebMvcTest中成功,在运行服务器上失败

时间:2018-10-09 21:11:37

标签: java spring spring-boot

我有点被这个困扰。我看过的例子和我在网上找到的所有东西都说

public ResponseEntity<StandaloneTerminals> getTerminalsBySearchTerm(
        @PathParam("term") String term, @PageableDefault(page = 0, size = 25) Pageable pageRequest) {
    Page<StandaloneTerminal> terminals;
    ...
}

应该工作。在

的单元测试中运行时
@RunWith(SpringRunner.class)
@WebMvcTest(TerminalController.class)
public class TerminalControllerTest {
...

@Test
public void getAll() throws Exception {
    MvcResult result = this.mockMvc.perform(get("/terminals")).andDo(print())             
            .andExpect(status().is(200))
            .andReturn();
    ...
}

可以!

但是,实际上将Postman指向该端点会导致

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface

我已经阅读了有关此问题的有关Stack Overflow的多个问题,并且为了安全起见,尝试将@EnableSpringDataWebSupport添加到新的WebConfig类以及在不同的时间添加到AppConfig和Controller中。 Spring继续拒绝实例化此bean。

编辑:根据要求配置应用程序:

@SpringBootApplication
@EnableSpringDataWebSupport
public class AppConfig {

    public static void main(String[] args) {
        SpringApplication.run(AppConfig.class, args);
    }
}

2 个答案:

答案 0 :(得分:1)

我们始终无法弄清Spring为什么无法实例化该bean的原因,但是我们通过使用默认构造函数实现了我们自己的Pageable实现,发现了一种非侵入性的解决方法。到目前为止,我们还没有运气让Sort以这种方式工作。

答案 1 :(得分:0)

尝试更改

@PageableDefault(page = 0, size = 25) Pageable pageRequest

@PageableDefault(page = 0, size = 25) @RequestParameter(required=false) PageRequest pageRequest