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"/>

+ Recent posts