java - Spring 启动 : testing paged results using TestRestTemplate

标签 java spring integration-testing spring-restcontroller spring-rest

我有一个资源 A,它有一个 Controller ,其中包含一个用于检索分页 A 项目的端点:

      public ResponseEntity getAllAs(
      @PageableDefault(size = 25, value = 0) Pageable pageable) {
        Page<A> pagedAs = .....
        return ResponseEntity.ok(pagedAs);
  }

当我尝试创建集成测试并使用 TestRestTemplate 调用此端点时,我遇到了一个问题,因为无法实例化 Page 对象。

调用如下:

    ResponseEntity<Page> response =  template.getForEntity("/api/as,
            Page.class );

这里是异常(exception):

  com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.Page` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
 at [Source: (PushbackInputStream); line: 1, column: 1]

我想关于 Page 无法实例化这一事实是正常的,但这限制了使用 spring boot 分页结果时的可测试性。

最佳答案

Page<T> 更改 Controller 的响应至 List<T> .

public ResponseEntity getAllAs(
       @PageableDefault(size = 25, value = 0) Pageable pageable) {
       Page < A > pagedAs = .....
       return ResponseEntity.ok(pagedAs);
   }

然后将您使用 API 的位置从列表转换为页面

Page<T> page = new PageImpl<>(list);

关于java - Spring 启动 : testing paged results using TestRestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733380/

相关文章:

java - 无法读取整个 header ;读取 0 字节;预计 512 字节

java - 在 Spring Boot 中使用 Google OAuth2 时无法访问 OAuth2AuthenticationToken

java - 如何在 Spring Security 中以编程方式配置自定义过滤器?

javascript - 如何为 <noscript> 标签编写自动化测试?

spring-boot - Spring boot 禁用 @EnableAsync 进行集成测试

java - MVC 模式和 Swing

Java 菜单使用 Do while 循环不断重复

java - 在 Spring Controller 上执行 $.ajax POST 后收到错误请求错误 (400)

java - Spring bean 创建错误莫名其妙

c# - 每个测试类的多个 ClassCleanup 属性