Lun*_*ape 5 java spring pagination
我有一个 HotelRepository,它有一个命名方法,它返回一个默认Page<Hotel>项作为结果而不是一个列表。
我想将内容类型更改Hotel为HotelDto在页面中,因为 DTO 具有我想要显示的自定义参数。我已经有一个构造函数可以将 Hotel 转换为 HotelDto。
我的尝试:
Page<Hotel> hotels = dao.findAll(pageRequest);
return new PageImpl<>(
hotels.getContent().stream()
.map(hotel -> new HotelListItemDto(hotel, hotel.getSupplier())).collect(Collectors.toList()),
pageRequest, hotels.getContent().size());
Run Code Online (Sandbox Code Playgroud)
问题是它只操作结果的一页。当然,我可以先把所有的结果作为一个列表,然后根据列表创建一个页面,但是这样就失去了Page(我认为返回页面会提高搜索请求的性能)的优势。
那么我应该怎么做才能保持页面优势,但仍然可以自定义输出?
Ari*_*han 11
你几乎做到了:)
除非我跳过某些内容,否则您唯一需要更改的是传递给PageImpl构造函数的大小。
而不是使用hotels.getContent().size()(为您提供实际页面上内容的大小),您应该使用hotels.getTotalElements()它为您提供所有可用页面中元素的总大小。
更新 1:
要正确执行此操作,您应该更改以下代码:
Page<Hotel> hotels = dao.findAll(pageRequest);
return new PageImpl<>(
hotels.getContent().stream()
.map(hotel -> new HotelListItemDto(hotel, hotel.getSupplier())).collect(Collectors.toList()),
pageRequest, hotels.getTotalElements());
Run Code Online (Sandbox Code Playgroud)
上面的代码将创建一个类似于hotels页面的页面。这就是您的参数足以用于 PageImpl 的方式:
HotelListItemDemo新页面将具有的内容(类型)的列表。由于这只是hotels内容到另一种类型的映射,因此元素的数量将完全相同。hotels.getTotalElements()方法中返回的值)。这样,PageImpl 还可以计算hasNext()我在评论中提到的内容。希望这对你有帮助。
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |