백엔드/Spring
[JPA] List to Page - List를 Page로 변환해서 사용하기
작은소행성
2023. 8. 7. 21:30
JPA 에서 제공하는 Page를 사용하고 싶은데
데이터를 가공해서 사용하다 보니 List 로 결과가 나오고 있어서
List를 Page로 변환해서 사용하고자 한다.
아래 코드를 참고해서 List 를 Page로 변환해서 사용하면 된다.
방법1
Page<CompanyResponse.CompanyDto> pageResult = (Page<CompanyResponse.CompanyDto>) PageUtils.makePageResponse(list, pageable);
페이징 처리를 위한 공통 코드
public static Page<?> makePageResponse(List<?> list, Pageable paging, int totalCount) {
try {
return (new PageImpl<>(list, paging, totalCount));
} catch (Exception e) {
return (new PageImpl<>(new ArrayList<>(), paging, totalCount));
}
}
응답값
@Getter
@SuperBuilder
public class CompanyResponse extends PagingDto {
private final List<CompanyDto> companyDtos;
@Data
@Builder
public static class CompanyDto {
@Schema(name = "회사 아이디")
private Long companyId;
@Schema(name = "회사명")
private String companyName;
}
}
응답값에서 사용하는 페이지 DTO
@Getter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class PagingDto {
@Builder.Default
private int size = 15;
@Builder.Default
private int page = 1;
@Builder.Default
private long totalCount = 0;
@Builder.Default
private int totalPages = 0;
}
방법2
위의 방법으로 안될때는 아래 내용처럼 페이징 처리를 위한 값을 하나씩 다 처리해서 사용해도 된다.
List<Company> listResult = companyRepotiroy.findAllByName(name);
// 요청으로 들어온 page와 한 page당 원하는 데이터의 갯수
PageRequest pageRequest = PageRequest.of(page, size);
int start = (int) pageRequest.getOffset();
int end = Math.min((start + pageRequest.getPageSize()), listResult.size());
nt totalCount = listResult.size() < pageable.getPageSize() ? 1 : (int) Math.ceil((double) listResult.size() / pageable.getPageSize()); // 페이지 사이즈에 따른 페이지 전체 카운트
Page<Company> userPage = new PageImpl<>(listResult.subList(start, end), pageRequest, listResult.size());
참고
반응형