Spring boot:使用TestRestTemplate测试分页结果

问题描述 投票:2回答:1

我有一个资源A,该资源的控制器包含用于检索分页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 );

这里是例外:

  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分页结果时的可测试性,这是正常的。

java spring integration-testing spring-restcontroller spring-rest
1个回答
0
投票

将控制器的响应从Page<T>更改为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);
© www.soinside.com 2019 - 2024. All rights reserved.