java - Spring boot:使用 TestRestTemplate 测试分页结果
问题描述
我有一个资源 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 分页结果时的可测试性。
解决方案
将控制器的响应从 更改Page<T>
为List<T>
。
public ResponseEntity getAllAs(
@PageableDefault(size = 25, value = 0) Pageable pageable) {
Page < A > pagedAs = .....
return ResponseEntity.ok(pagedAs);
}
然后将您使用 API 的位置从 List 转换为 Page
Page<T> page = new PageImpl<>(list);
推荐阅读
- c - Loadrunner:将许多xml文件内容存储在一个数组中并一一调用数组
- r - R中if循环的动态渲染条件
- javascript - 如何使用jQuery获取没有边框的元素对象?
- javascript - iframe 被屏幕截了一半
- php - 根据时区以 24 或 12 小时格式显示时间
- android - 禁止访问谷歌登录
- c# - 从 Angular JS 调用 Web API 错误:“Access-Control-Allow-Origin”标头包含多个值,因此不允许访问 Origin
- php - 无法使用 wordpress 上传 otf 文件
- jupyter-notebook - Jupyter 笔记本 ModuleNotFound
- flutter - 如何解决文本溢出