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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,6 +15,7 @@
*/ */
package me.zhengjie.modules.system.service; package me.zhengjie.modules.system.service;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.system.service.dto.UserDto; import me.zhengjie.modules.system.service.dto.UserDto;
import me.zhengjie.modules.system.service.dto.UserLoginDto; import me.zhengjie.modules.system.service.dto.UserLoginDto;
@ -100,7 +101,7 @@ public interface UserService {
* @param pageable * @param pageable
* @return / * @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; package me.zhengjie.modules.system.service.impl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Dict; import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.domain.DictDetail; import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.repository.DictRepository; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author Zheng Jie * @author Zheng Jie
@ -49,7 +49,7 @@ public class DictDetailServiceImpl implements DictDetailService {
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
@Override @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); Page<DictDetail> page = dictDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(dictDetailMapper::toDto)); return PageUtil.toPage(page.map(dictDetailMapper::toDto));
} }
@ -92,4 +92,4 @@ public class DictDetailServiceImpl implements DictDetailService {
Dict dict = dictRepository.findById(dictDetail.getDict().getId()).orElseGet(Dict::new); Dict dict = dictRepository.findById(dictDetail.getDict().getId()).orElseGet(Dict::new);
redisUtils.del(CacheKey.DICT_NAME + dict.getName()); redisUtils.del(CacheKey.DICT_NAME + dict.getName());
} }
} }

View File

@ -17,6 +17,7 @@ package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.modules.system.domain.Dict; import me.zhengjie.modules.system.domain.Dict;
import me.zhengjie.modules.system.service.dto.DictDetailDto; import me.zhengjie.modules.system.service.dto.DictDetailDto;
import me.zhengjie.modules.system.service.dto.DictQueryCriteria; import me.zhengjie.modules.system.service.dto.DictQueryCriteria;
@ -48,7 +49,7 @@ public class DictServiceImpl implements DictService {
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
@Override @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); Page<Dict> page = dictRepository.findAll((root, query, cb) -> QueryHelp.getPredicate(root, dict, cb), pageable);
return PageUtil.toPage(page.map(dictMapper::toDto)); return PageUtil.toPage(page.map(dictMapper::toDto));
} }
@ -118,4 +119,4 @@ public class DictServiceImpl implements DictService {
public void delCaches(Dict dict){ public void delCaches(Dict dict){
redisUtils.del(CacheKey.DICT_NAME + dict.getName()); redisUtils.del(CacheKey.DICT_NAME + dict.getName());
} }
} }

View File

@ -16,6 +16,7 @@
package me.zhengjie.modules.system.service.impl; package me.zhengjie.modules.system.service.impl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.utils.PageResult;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityExistException;
import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.domain.Job;
@ -52,7 +53,7 @@ public class JobServiceImpl implements JobService {
private final UserRepository userRepository; private final UserRepository userRepository;
@Override @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); Page<Job> page = jobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(jobMapper::toDto).getContent(),page.getTotalElements()); return PageUtil.toPage(page.map(jobMapper::toDto).getContent(),page.getTotalElements());
} }
@ -122,4 +123,4 @@ public class JobServiceImpl implements JobService {
throw new BadRequestException("所选的岗位中存在用户关联,请解除关联再试!"); throw new BadRequestException("所选的岗位中存在用户关联,请解除关联再试!");
} }
} }
} }

View File

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