1. controller
@GetMapping("/api/cafes")
public Page<CafeListResponseDto> ReadAllCafeList(
@RequestParam("page") int page,
@RequestParam("size") int size
// @RequestParam("sortBy") String sortBy,
// @RequestParam("isAsc") boolean isAsc
){
page = page - 1;
return cafeService.findAllCafeList(page, size);
}
2. service
public Page<CafeListResponseDto> findAllCafeList(int page, int size) {
Pageable pageRequest = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdDate"));
Page<Cafe> all = cafeRepository.findAll(pageRequest);
// return all.map(cafe -> new CafeListResponseDto(cafe));
// 위의 주석단 람다식을 아래의 식으로 치환
return all.map(CafeListResponseDto::new);
}
Page<CafeListResponseDto> 형식으로 반환하는 방법을 몰라 responseDto로 Page<Cafe> 형태로 반환했을때 클라이언트에 노출되는 모든 값을 Dto의 멤버변수로 설정하는 코드를 작성하였었다.
추가적으로 페이징에 대해 공부하다보니 map을 이용하여 변환해주면 Page<CafeListResponseDto> 형식으로 반환이 가능하다는 것을 알게되어 리팩토링 진행하였다.
리팩토링 전 코드
@Data
public class CafePageResponseDto {
List<CafeListResponseDto> content = new ArrayList<>();
private int number;
private int numberOfElements;
private Pageable pageable;
private int size;
private Sort sort;
private Long totalElements;
private int totalPages;
public CafePageResponseDto(Page<Cafe> all) {
for(int i=0; i < all.getContent().size(); i++){
content.add(new CafeListResponseDto(all.getContent().get(i)));
}
number = all.getNumber();
numberOfElements = all.getNumberOfElements();
pageable = all.getPageable();
size = all.getSize();
sort = all.getSort();
totalElements = all.getTotalElements();
totalPages = all.getTotalPages();
}
}
페이징 사용을 위한 cdn
html 코드에 포함되어 있어야함
<!-- paging -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/paginationjs/2.1.4/pagination.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paginationjs/2.1.4/pagination.css"/>
'프로그래밍 > JPA Project - sparta' 카테고리의 다른 글
타임리프 값 변형하여 사용하는 방법 (글자 추가, 콤마 추가) (1) | 2022.07.10 |
---|---|
타임리프 값 -> 자바스크립트에서 사용하기 (0) | 2022.07.10 |
top5 조회 로직 구현 (페이징x) (0) | 2022.07.08 |
Post Method Refactoring - 카페 등록 api 리팩토링 (0) | 2022.07.06 |
Spring Security - 페이지, thymeleaf 접근 제한 (0) | 2022.07.04 |