[英]Convert List<Map<String, String>> to Object in Java Spring boot jpa
[英]How to convert a list of enity object to page object in Spring MVC (JPA)?
我有一个实体List
。 如何使用 Spring MVC 4 和 Spring Data JPA 将其转换为Page
对象?
有一个Page
实现:
final Page<Something> page = new PageImpl<>(theListOfSomething);
还有一个构造函数:
Page<FOO> page = new PageImpl<>(listOfsomething, pageable, listOfsomething.size());
我认为您还需要获取正确的页面内容。
PageRequest pageRequest = PageRequest.of(offset, limit);
List<Product> products = getProducts();
int total = products.size();
int start = toIntExact(pageRequest.getOffset());
int end = Math.min((start + pageRequest.getPageSize()), total);
List<Product> output = new ArrayList<>();
if (start <= end) {
output = products.subList(start, end);
}
return new PageImpl<>(
output,
pageRequest,
total
);
您可以将列表传递给函数以使其成为可分页对象。 如果子列表的起始值小于列表大小,则返回空内容。
public Page<?> toPage(List<?> list, Pageable pageable) {
int start = (int) pageable.getOffset();
int end = Math.min((start + pageable.getPageSize()), list.size());
if(start > list.size())
return new PageImpl<>(new ArrayList<>(), pageable, list.size());
return new PageImpl<>(list.subList(start, end), pageable, list.size());
}
以上答案都假设列表是您希望返回的内容。 以下是对包含总记录的列表执行分页的操作。
//pageNum starts with 1
//size: page size
//totalRecords, total records
Page<Record> myMethod(int pageNum, int size, List<MyRecord> totalRecords){
if(pageNum<1){
pageNum = 1;
}
if(size < 1){
size = 10;
}
//spring page starts with 0
Pageable pageable = new PageRequest(pageNum-1, size);
//when pageNum * size is too big(bigger than list.size()), totalRecords.subList() will throw a exception, we need to fix this
if(pageable.getOffset() > list.size()){
pageable = new PageRequest(0, size);
}
List<MyRecord> pageRecords = totalRecords.subList(pageable.getOffset(), Math.min(pageable.getOffset() + pageable.getPageSize(), totalRecords.size()));
Page springPage = new PageImpl<>(pageRecords, pageable, totalRecords.size());
return springPage;
}
通常,控制器应该接收一个Pageable
对象作为参数。 Pageable
对象包含页码、页面大小和排序信息。
然后你可以通过排序从JpaRepository
查询所有实体并生成Page
对象:
List<Entity> allList = jpaRepository.findAll(pageable.getSort());
List<Entity> pageList = allList.stream()
.skip(pageable.getPageSize() * pageable.getPageNumber())
.limit(pageable.getPageSize())
.collect(Collectors.toList());
return new PageImpl<>(pageList, pageable, allList.size());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.