feat: 增加分页实体 APage,使 Swagger 可显示接口的响应示例 (#800)

* feat: 增加分页实体 APage,使 Swagger 可显示接口的响应示例

1. 增加类 APage,并重构 PageUtils
2. 调整 UserController 的 `查询用户` 接口的返回值类型

* refactor: rename APage -> PageResult
pull/729/head^2
Jover 2023-06-30 13:43:45 +08:00 committed by GitHub
parent 8ce9db9a5c
commit a74cf51c0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 51 additions and 34 deletions

View File

@ -0,0 +1,17 @@
package me.zhengjie.utils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.List;
@Getter
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
public class PageResult<T> {
private final List<T> content;
private final long totalElements;
}

View File

@ -28,11 +28,11 @@ public class PageUtil extends cn.hutool.core.util.PageUtil {
/**
* List
*/
public static List toPage(int page, int size , List list) {
public static <T> List<T> paging(int page, int size , List<T> list) {
int fromIndex = page * size;
int toIndex = page * size + size;
if(fromIndex > list.size()){
return new ArrayList();
return Collections.emptyList();
} else if(toIndex >= list.size()) {
return list.subList(fromIndex,list.size());
} else {
@ -43,21 +43,15 @@ public class PageUtil extends cn.hutool.core.util.PageUtil {
/**
* Page redis
*/
public static Map<String,Object> toPage(Page page) {
Map<String,Object> map = new LinkedHashMap<>(2);
map.put("content",page.getContent());
map.put("totalElements",page.getTotalElements());
return map;
public static <T> PageResult<T> toPage(Page<T> page) {
return new PageResult<>(page.getContent(), page.getTotalElements());
}
/**
*
*/
public static Map<String,Object> toPage(Object object, Object totalElements) {
Map<String,Object> map = new LinkedHashMap<>(2);
map.put("content",object);
map.put("totalElements",totalElements);
return map;
public static <T> PageResult<T> toPage(List<T> list, long totalElements) {
return new PageResult<>(list, totalElements);
}
}

View File

@ -90,7 +90,7 @@ public class GeneratorServiceImpl implements GeneratorService {
"where table_schema = (select database()) and table_name like :table";
Query queryCount = em.createNativeQuery(countSql);
queryCount.setParameter("table", StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%");
Object totalElements = queryCount.getSingleResult();
long totalElements = (long) queryCount.getSingleResult();
return PageUtil.toPage(tableInfos, totalElements);
}

View File

@ -16,6 +16,7 @@
package me.zhengjie.modules.security.service;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.security.config.bean.SecurityProperties;
import me.zhengjie.modules.security.service.dto.JwtUserDto;
import me.zhengjie.modules.security.service.dto.OnlineUserDto;
@ -70,10 +71,10 @@ public class OnlineUserService {
* @param pageable /
* @return /
*/
public Map<String,Object> getAll(String filter, Pageable pageable){
public PageResult<OnlineUserDto> getAll(String filter, Pageable pageable){
List<OnlineUserDto> onlineUserDtos = getAll(filter);
return PageUtil.toPage(
PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), onlineUserDtos),
PageUtil.paging(pageable.getPageNumber(),pageable.getPageSize(), onlineUserDtos),
onlineUserDtos.size()
);
}

View File

@ -20,6 +20,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import me.zhengjie.annotation.Log;
import me.zhengjie.utils.PageResult;
import me.zhengjie.config.RsaProperties;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.service.DataService;
@ -77,7 +78,7 @@ public class UserController {
@ApiOperation("查询用户")
@GetMapping
@PreAuthorize("@el.check('user:list')")
public ResponseEntity<Object> queryUser(UserQueryCriteria criteria, Pageable pageable){
public ResponseEntity<PageResult<UserDto>> queryUser(UserQueryCriteria criteria, Pageable pageable){
if (!ObjectUtils.isEmpty(criteria.getDeptId())) {
criteria.getDeptIds().add(criteria.getDeptId());
// 先查找是否存在子节点

View File

@ -15,12 +15,12 @@
*/
package me.zhengjie.modules.system.service;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.service.dto.DictDetailDto;
import me.zhengjie.modules.system.service.dto.DictDetailQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author Zheng Jie
@ -52,7 +52,7 @@ public interface DictDetailService {
* @param pageable
* @return /
*/
Map<String,Object> queryAll(DictDetailQueryCriteria criteria, Pageable pageable);
PageResult<DictDetailDto> queryAll(DictDetailQueryCriteria criteria, Pageable pageable);
/**
*

View File

@ -15,6 +15,7 @@
*/
package me.zhengjie.modules.system.service;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDto;
import me.zhengjie.modules.system.service.dto.DictQueryCriteria;
@ -22,7 +23,6 @@ import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@ -37,7 +37,7 @@ public interface DictService {
* @param pageable
* @return /
*/
Map<String,Object> queryAll(DictQueryCriteria criteria, Pageable pageable);
PageResult<DictDto> queryAll(DictQueryCriteria criteria, Pageable pageable);
/**
*

View File

@ -15,6 +15,7 @@
*/
package me.zhengjie.modules.system.service;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Job;
import me.zhengjie.modules.system.service.dto.JobDto;
import me.zhengjie.modules.system.service.dto.JobQueryCriteria;
@ -22,7 +23,6 @@ import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@ -63,7 +63,7 @@ public interface JobService {
* @param pageable
* @return /
*/
Map<String,Object> queryAll(JobQueryCriteria criteria, Pageable pageable);
PageResult<JobDto> queryAll(JobQueryCriteria criteria, Pageable pageable);
/**
*

View File

@ -15,6 +15,7 @@
*/
package me.zhengjie.modules.system.service;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.service.dto.UserDto;
import me.zhengjie.modules.system.service.dto.UserLoginDto;
@ -100,7 +101,7 @@ public interface UserService {
* @param pageable
* @return /
*/
Object queryAll(UserQueryCriteria criteria, Pageable pageable);
PageResult<UserDto> queryAll(UserQueryCriteria criteria, Pageable pageable);
/**
*

View File

@ -16,6 +16,7 @@
package me.zhengjie.modules.system.service.impl;
import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.repository.DictRepository;
@ -32,7 +33,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
* @author Zheng Jie
@ -49,7 +49,7 @@ public class DictDetailServiceImpl implements DictDetailService {
private final RedisUtils redisUtils;
@Override
public Map<String,Object> queryAll(DictDetailQueryCriteria criteria, Pageable pageable) {
public PageResult<DictDetailDto> queryAll(DictDetailQueryCriteria criteria, Pageable pageable) {
Page<DictDetail> page = dictDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(dictDetailMapper::toDto));
}

View File

@ -17,6 +17,7 @@ package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDetailDto;
import me.zhengjie.modules.system.service.dto.DictQueryCriteria;
@ -48,7 +49,7 @@ public class DictServiceImpl implements DictService {
private final RedisUtils redisUtils;
@Override
public Map<String, Object> queryAll(DictQueryCriteria dict, Pageable pageable){
public PageResult<DictDto> queryAll(DictQueryCriteria dict, Pageable pageable){
Page<Dict> page = dictRepository.findAll((root, query, cb) -> QueryHelp.getPredicate(root, dict, cb), pageable);
return PageUtil.toPage(page.map(dictMapper::toDto));
}

View File

@ -16,6 +16,7 @@
package me.zhengjie.modules.system.service.impl;
import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.domain.Job;
@ -52,7 +53,7 @@ public class JobServiceImpl implements JobService {
private final UserRepository userRepository;
@Override
public Map<String,Object> queryAll(JobQueryCriteria criteria, Pageable pageable) {
public PageResult<JobDto> queryAll(JobQueryCriteria criteria, Pageable pageable) {
Page<Job> page = jobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(jobMapper::toDto).getContent(),page.getTotalElements());
}

View File

@ -16,6 +16,7 @@
package me.zhengjie.modules.system.service.impl;
import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.config.FileProperties;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.security.service.OnlineUserService;
@ -61,7 +62,7 @@ public class UserServiceImpl implements UserService {
private final UserLoginMapper userLoginMapper;
@Override
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
public PageResult<UserDto> queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(userMapper::toDto));
}