List封装为Page对象
最近在项目中,经常碰到这样的情况,就是说前台需要page对象,但是我后台page查询出来的数据(entity类)并不是前台需要的数据(dto),还需要二次封装,前台要page对象啊,习惯了用工具类,咋自己封装一个page对象哦?
所有就有了这篇文章,实际上思路都是一样的,就是我返回的数据肯定是个Page对象,我查出来的数据要么是Page,要么是List,是page就getContent一下获取到List,然后再由List转为page对象;
我自己找到的方法:
首先要有分页必备的Pageable:
Pageable pageable = new PageRequest(currentPage - 1, pageSize);
然后就是主体了:
private Page<SsoUserInfo> getPageSsoUserInfo(Pageable pageable, List<SsoUserInfo> userInfosList) { if (pageable.getOffset() > userInfosList.size()) { long total = 0l; PageImpl<SsoUserInfo> emptyPage = new PageImpl<>(Lists.newArrayList(), pageable, total); return emptyPage; } if (pageable.getOffset() <= userInfosList.size() && pageable.getOffset() + pageable.getPageSize() > userInfosList.size()) { List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), userInfosList.size()); PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size()); return ssoUserInfoPage; } List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), (int) (pageable.getOffset() + pageable.getPageSize())); PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size()); return ssoUserInfoPage; }
之所以会写这篇文章,因为我今天翻代码的时候,发现了我同事写的同样作用的代码:
Pageable pageable = new PageRequest(formBean.getCurrentPage() - 1, formBean.getPageSize(), sort); Page<CmsContent> page = contentDao.findAll(specification, pageable); List<ContentDto> list = new ArrayList<>(); for (CmsContent cmsContent : page.getContent()) { ContentDto text = dtoByContent(cmsContent); list.add(text); } return new PageImpl<ContentDto>(list, page.getPageable(), page.getTotalElements());
mmp!还是见识少啊,但是看了下源码,觉得官方文档真的是个好东西啊